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中使用不同编码读写txt文件详解
May 28 Python
Python聊天室实例程序分享
Jan 05 Python
轻松理解Python 中的 descriptor
Sep 15 Python
Python 模拟员工信息数据库操作的实例
Oct 23 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Django框架实现的简单分页功能示例
Dec 04 Python
简单了解python的内存管理机制
Jul 08 Python
django框架使用方法详解
Jul 18 Python
Python嵌套函数,作用域与偏函数用法实例分析
Dec 26 Python
如何在Windows中安装多个python解释器
Jun 16 Python
python实现excel公式格式化的示例代码
Dec 23 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 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输入流php://input使用浅析
2014/09/02 PHP
php xhprof使用实例详解
2019/04/15 PHP
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
原生js开发的日历插件
2017/02/04 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
Python 统计字数的思路详解
2018/05/08 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
PyTorch基本数据类型(一)
2019/05/22 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
python如何输出反斜杠
2020/06/18 Python
python函数超时自动退出的实操方法
2020/12/28 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
外贸业务员求职自荐信分享
2013/09/21 职场文书
优秀员工表扬信
2014/01/17 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
欢迎词范文
2015/01/27 职场文书
家属慰问信
2015/02/14 职场文书
老乡会致辞
2015/07/28 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书