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 实现文件的递归拷贝实现代码
Aug 02 Python
Python中IPYTHON入门实例
May 11 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
python 标准差计算的实现(std)
Jul 29 Python
python 动态调用函数实例解析
Oct 21 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
基于python实现获取网页图片过程解析
May 11 Python
python3跳出一个循环的实例操作
Aug 18 Python
Python 实现进度条的六种方式
Jan 06 Python
详解运行Python的神器Jupyter Notebook
Jun 03 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
使用数据库保存session的方法
2006/10/09 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
经验几则 推荐
2006/09/05 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
JavaScript实现在标题栏上显示当前日期的方法
2015/03/19 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
python中list循环语句用法实例
2014/11/10 Python
django框架如何集成celery进行开发
2017/05/24 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Python调用飞书发送消息的示例
2020/11/10 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
必须要使用游标的SQL语句有那些
2012/05/07 面试题
文员个人求职自荐信
2013/09/21 职场文书
实习护理工作自我评价
2013/09/25 职场文书
机械工程师的岗位职责
2013/11/17 职场文书
党员干部公开承诺书
2014/03/26 职场文书
民主评议党员工作总结
2014/10/20 职场文书
运动会闭幕词
2015/01/28 职场文书
少年雷锋观后感
2015/06/10 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书