Django中login_required装饰器的深入介绍


Posted in Python onNovember 24, 2017

前言

Django提供了多种装饰器, 其中login_required可能是经常会使用到的。 这里介绍下四种使用此装饰器的办法。

当然, 在使用前, 记得在工程目录的settings.py中设置好LOGIN_URL

使用方法

1. URLconf中装饰

from django.contrib.auth.decorators import login_required, permission_required
from django.views.generic import TemplateView

from .views import VoteView

urlpatterns = [
 url(r'^about/', login_required(TemplateView.as_view(template_name="secret.html"))),
 url(r'^vote/', permission_required('polls.can_vote')(VoteView.as_view())),
]

2. 装饰基于函数的视图

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse

@login_required
def my_view(request):
 if request.method == 'GET':
  # <view logic>
  return HttpResponse('result')

3. 装饰类的视图

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView

class ProtectedView(TemplateView):
 template_name = 'secret.html'

 @method_decorator(login_required)
 def dispatch(self, *args, **kwargs):
  return super(ProtectedView, self).dispatch(*args, **kwargs)

4. 装饰通过Mixin类继承来实现

from django.contrib.auth.decorators import login_required

from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.views.generic import View

from .forms import MyForm

class LoginRequiredMixin(object):
 @classmethod
 def as_view(cls, **initkwargs):
  view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
  return login_required(view)

class MyFormView(LoginRequiredMixin, View):
 form_class = MyForm
 initial = {'key': 'value'}
 template_name = 'form_template.html'

 def get(self, request, *args, **kwargs):
  form = self.form_class(initial=self.initial)
  return render(request, self.template_name, {'form': form})
 
 def post(self, request, *args, **kwargs):
  # code here

Django 用户登陆访问限制 @login_required

在网站开发过程中,经常会遇到这样的需求:用户登陆系统才可以访问某些页面,如果用户没有登陆而直接访问就会跳转到登陆界面。

要实现这样的需求其实很简单:

      1、在相应的 view 方法的前面添加 django 自带的装饰器 @login_required

      2、在 settings.py 中配置 LOGIN_URL 参数

      3、修改 login.html 表单中的 action 参数

# views.py
from djanco.contrib.auth.decorators import login_required
from django.shortcuts import render_to_response

@login_required
def index(request):
return render_to_response('index.html')
# settings.py
....
LOGIN_URL = '/accounts/login/' # 根据你网站的实际登陆地址来设置
....

如果要使用 django 默认登陆地址,则可以通过在 urls.py 中添加如此配置:

# urls.py
....
url(r'^accounts/login/', views.login),
....
# login.html
<div class="container">
<form class="form-signin" action="/accounts/login/" method="post">
{% csrf_token %}
<!--csrf_token:生成令牌-->
<h2 class="form-signin-heading" align="center">登录系统</h2>
<label for="inputUsername" class="sr-only">username</label>
<input type="text" name="username" id="inputUsername" class="form-control" placeholder="username" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> 记住密码
</label>
</div>
<br />
<button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>
<br />
<span style="color: red;">{{ login_err }}</span>
</form>
</div>
<!-- /container -->

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。   

Python 相关文章推荐
python定时器使用示例分享
Feb 16 Python
Python线程的两种编程方式
Apr 14 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
mac 安装python网络请求包requests方法
Jun 13 Python
详解Python 正则表达式模块
Nov 05 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
使用python动态生成波形曲线的实现
Dec 04 Python
python生成大写32位uuid代码
Mar 03 Python
Python识别处理照片中的条形码
Nov 16 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 #Python
pip安装Python库时遇到的问题及解决方法
Nov 23 #Python
python清理子进程机制剖析
Nov 23 #Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 #Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 #Python
深入理解Python3 内置函数大全
Nov 23 #Python
Python内置函数delattr的具体用法
Nov 23 #Python
You might like
浅析PHP Socket技术
2013/08/02 PHP
php调用shell的方法
2014/11/05 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
JQuery live函数
2010/12/24 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
Python生成不重复随机值的方法
2015/05/11 Python
Python作用域用法实例详解
2016/03/15 Python
Python的re模块正则表达式操作
2016/05/25 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
用 Python 制作地球仪的方法
2020/04/24 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
德国团购网站:Groupon德国
2018/03/13 全球购物
全陪导游欢迎词
2014/01/17 职场文书
就业协议书怎么填
2014/04/11 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
2014年大学生工作总结
2014/11/20 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
介绍信范文大全
2015/05/07 职场文书
入党转正申请报告
2015/05/15 职场文书
2015年科普工作总结
2015/07/23 职场文书
公司出差管理制度范本
2015/08/05 职场文书