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实现每次处理一个字符的三种方法
Oct 09 Python
python分割列表(list)的方法示例
May 07 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
Python简单获取二维数组行列数的方法示例
Dec 21 Python
Python中遍历列表的方法总结
Jun 27 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 Python
Pycharm Plugins加载失败问题解决方案
Nov 28 Python
Python中rapidjson参数校验实现
Jul 25 Python
python数字图像处理:图像的绘制
Jun 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
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP 代码规范小结
2012/03/08 PHP
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
PDO::prepare讲解
2019/01/29 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
Python中用Spark模块的使用教程
2015/04/13 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
对numpy中轴与维度的理解
2018/04/18 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
创意广告词
2014/03/17 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技