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的Flask框架的简介和安装方法
Nov 13 Python
浅析Python基础-流程控制
Mar 18 Python
python二分查找算法的递归实现方法
May 12 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
Django多数据库的实现过程详解
Aug 01 Python
python提取xml里面的链接源码详解
Oct 15 Python
Python上下文管理器用法及实例解析
Nov 11 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 Python
python中的被动信息搜集
Apr 29 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的控制语句
2006/10/09 PHP
PHP的开发框架的现状和展望
2007/03/16 PHP
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
PHP实现八皇后算法
2019/05/06 PHP
XP折叠菜单&amp;仿QQ2006菜单
2006/12/16 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
python多重继承新算法C3介绍
2014/09/28 Python
python利用beautifulSoup实现爬虫
2014/09/29 Python
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python写入xml文件的方法
2015/05/08 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
就业自荐信
2013/12/04 职场文书
工作作风承诺书
2014/08/30 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
债务追讨律师函
2015/06/24 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
python使用pygame创建精灵Sprite
2021/04/06 Python
MySQL数字类型自增的坑
2021/05/07 MySQL
纯html+css实现Element loading效果
2021/08/02 HTML / CSS