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中的字符串操作和编码Unicode详解
Jan 18 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
使用Python设计一个代码统计工具
Apr 04 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
Python基础学习之奇异的GUI对话框
May 27 Python
Python下opencv库的安装过程及问题汇总
Jun 11 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 Python
4种方法python批量修改替换列表中元素
Apr 07 Python
python中 Flask Web 表单的使用方法
May 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简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
Python Property属性的2种用法
2015/06/21 Python
python框架django基础指南
2016/09/08 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
Python面向对象进阶学习
2019/05/21 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
python集合删除多种方法详解
2020/02/10 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
西门豹教学反思
2014/02/04 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
2016银行求职自荐信
2016/01/28 职场文书