Django中@login_required用法简介
我们在网站开发过程中,经常会遇到这样的需求:
- 用户登陆系统才可以访问某些页面
- 如果用户没有登陆而直接访问就会跳转到登陆界面,而不能访问其他页面。
- 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址
要实现这样的需求其实很简单:
- 使用django自带的装饰器 @login_required。
- 在相应的view方法的前面添加@login_required
- 并在settings.py中配置LOGIN_URL参数
- 修改login.html中的表单action参数
view.py设置:
from djanco.contrib.auth.decorators import login_required from django.shortcuts import render_to_response from django.http import HttpResponse@login_required def myview(request):return render_to_response('index.html')
如果用户还没有登录,默认会跳转到‘/accounts/login/’。这个值可以在settings文件中通过LOGIN_URL参数来设定。(后面还会自动加上你请求的url作为登录后跳转的地址,如: /accounts/login/?next=/polls/3/ 登录完成之后,会去请求/poll/3)
setting.py设置:
LOGIN_URL = '/accounts/login/' #这个路径需要根据你网站的实际登陆地址来设置
urls.py设置:
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^, views.index),url(r'^accounts/login/, views.acc_login),url(r'^logout/, views.acc_logout),url(r'^host/, views.host, name='host'),url(r'^asset/, views.asset,name='asset'),url(r'^audit/, views.audit,name='audit'), ]
如果LOGIN_URL使用默认值,那么在urls.py中还需要进行如下设置:(加入下面这句)
(r'^accounts/login/$', 'django.contrib.auth.views.login'),
这样的话,如果登录,程序会默认跳转到“templates\registration\login.html”这个模板。
如果想换个路径,另一种方式:那就再加个template_name参数,如下:
(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'myapp/login.html'}),
这样程序就会跳转到templates\myapp\login.html”
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 -->
其他有用方法
除了login这个有用的方法之外,auth模块还提供很多有用的方法,比如:
logout(request[, next_page, template_name, redirect_field_name])
password_change(request[, template_name, post_change_redirect, password_change_form])
password_change_done(request[, template_name])
password_reset(request[, is_admin_site, template_name, email_template_name, password_reset_form,token_generator, post_reset_redirect, from_email])
password_reset_done(request[, template_name])
用法用例:
(r'^change_passwd/$', 'django.contrib.auth.views.password_change', {'template_name': 'change_passwd.html','post_change_redirect': '/',
}),
(r'^reset_passwd/$', 'django.contrib.auth.views.password_reset', {'template_name': 'reset_passwd.html','email_template_name': 'reset_passwd_email.html','post_reset_redirect': '/reset_done/','from_email': 'noreply@jihua.in',
}),
(r'^reset_confirm/(?P<uidb36>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', \'django.contrib.auth.views.password_reset_confirm', {'template_name': 'reset_confirm.html','post_reset_redirect': '/signin/',}
),
(r'^reset_done/$', 'django.views.generic.simple.direct_to_template', {'template': 'message.html', 'extra_context': {'msg': _(u'我们已将一封包含恢复密码步骤的邮件发到了您的邮箱,请查收'),
}}),
原文:https://www.cnblogs.com/breezey/p/6715641.html
转载于:https://www.cnblogs.com/wodekaifalog/p/10817275.html
Django中@login_required用法简介相关推荐
- 【Django】@login_required用法简介
在django项目中,经常会看到下面这样的代码: [python] view plain copy from django.contrib.auth.decorators import login_r ...
- Django 中 models 用法及参数详解
一. 模型常用字段 01. models.AutoField 自增列 (int(11)) 参数中必须填入 primary_key=True 默认情况下 Django 会为 ORM 中定义的每一张表加上 ...
- C#中ManualResetEvent用法简介
简单介绍 多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态.当控制线程调用Set()方法,所有等待线程将恢复并继续执行. ManualResetEvent ...
- django中获取sessionid
之前在django中一直用session处理一些问题,这次想拿到sessionid数据,发现跟以前的想法不太一样: django中的sessionid要通过下面这种方式取到: session_key ...
- 任务队列:celery快速入门及django中celery的用法
文章目录 一.celey的简介 1.1 celery的工作机制 1.2 安装celery(5.2版本) 二.celery快速入门 2.1 选择broker 2.2 celery的简单使用 2.2.1 ...
- php中__FILE__常量用法简介
php中__FILE__常量用法简介 http://blog.csdn.net/xbei07/article/details/5616020#comments出处 1.php中的__FILE__常量返 ...
- Matlab中 intlinprog函数用法简介
Matlab中 intlinprog函数用法简介 本来想要自己亲手写一遍的,发现了一优质博文基本上跟我做过的例题大差不差,所以就直接放上链接. 参考链接 https://www.cnblogs.com ...
- php中dump怎么使用,php中var_dump()方法的用法简介
摘要 腾兴网为您分享:php中var_dump()方法的用法简介,支付旭尊,鑫钱袋,携程,小米音乐等软件知识,以及星票网,dc,新房购置税计算器,听中国app,xbox360,当游游戏盒,蜗牛二手货车 ...
- Django中Celery简介
初识Celery: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,可将一些耗时的任务放入该消息队列中处理,一些定时任务也可以放入队列中自动执行 ...
最新文章
- 第二章 数据类型、运算符与表达式
- 震惊!java中日期格式化的大坑!
- Node.js建立服务、路径处理与响应
- mybatis传入list、array等数据集合的处理
- MUI 里js动态添加数字输入框后,增加、减少按钮无效
- 云筑网认证_云筑网集采平台怎么录入分包单位
- 压测|关于PHP7和5.6的压测对比
- PyTorch | 通过torch.eye创建单位对角矩阵 | torch.eye()如何使用?torch.eye()例子 | torch.eye()使用方法
- ruhe anzjhuang mysql_Mysql配置安装过程
- 洛谷——P3225 [HNOI2012]矿场搭建
- erlang 动态编译和加载遇到的问题。
- html菜单wodpress,wordpress进阶教程(二十二):初步了解菜单
- Javascript四种调用模式中的this指向
- 怎样做一个卓越的程序员
- 日常推荐大神操作,如何再oracle中delete数据后恢复
- Atitit orm 之道 艾龙著 1. 一、ORM的由来	1 2. ORM的组成: 	2 3. 常见的ORM框架: 	3 4. 、ORM与数据持久化的关系	3 5. Atitit
- Atitit 文员招募规范 attilax总结
- 分布式文件存储FastDFS之配置Nginx模块
- 浏览器中输入localhost或者127.0.0.1 打不开求大神教.
- HDU 4512 吉哥系列故事——完美队形I(最长公共上升子序列 LCIS)
热门文章
- java poi设置单元格格式为数值_Excel 文本转数值的方法——我找的好苦啊
- echart雷达图数据图形的填充颜色_数据可视化,职场数据分析都需要哪些常用的图表?...
- python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?
- Java MinIO文件上传返回访问路径及访问配置
- c#中dateTimePicker怎么获取当前的日期
- Juniper CoS 基本配置说明
- [CTO札记]第1天:认识人、熟悉环境
- Spring 无缝整合 quartz
- 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图...
- 程序员经常遇见的9大困难你造么?