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参数和作用域的使用
Nov 01 Python
在Python中编写数据库模块的教程
Apr 29 Python
python集合用法实例分析
May 30 Python
Python多进程分块读取超大文件的方法
Apr 13 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
python执行精确的小数计算方法
Jan 21 Python
Python中psutil的介绍与用法
May 02 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
PyInstaller运行原理及常用操作详解
Jun 13 Python
你需要学会的8个Python列表技巧
Jun 24 Python
浅析Python中的随机采样和概率分布
Dec 06 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中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
小议Javascript中的this指针
2010/03/18 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
Python中的With语句的使用及原理
2020/07/29 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
数据库的约束含义
2012/09/09 面试题
人事专员工作职责
2014/02/22 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
升职演讲稿范文
2014/05/23 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
个人求职自荐信范文
2014/06/20 职场文书
励志演讲稿500字
2014/08/21 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
各种货币符号快捷输入
2022/02/17 杂记
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server