我们在网站开发过程中,经常会遇到这样的需求:

  • 用户登陆系统才可以访问某些页面
  • 如果用户没有登陆而直接访问就会跳转到登陆界面,而不能访问其他页面。
  • 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

要实现这样的需求其实很简单:

  1. 使用django自带的装饰器 @login_required。
  2. 在相应的view方法的前面添加@login_required
  3. 并在settings.py中配置LOGIN_URL参数
  4. 修改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用法简介相关推荐

  1. 【Django】@login_required用法简介

    在django项目中,经常会看到下面这样的代码: [python] view plain copy from django.contrib.auth.decorators import login_r ...

  2. Django 中 models 用法及参数详解

    一. 模型常用字段 01. models.AutoField 自增列 (int(11)) 参数中必须填入 primary_key=True 默认情况下 Django 会为 ORM 中定义的每一张表加上 ...

  3. C#中ManualResetEvent用法简介

    简单介绍 多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态.当控制线程调用Set()方法,所有等待线程将恢复并继续执行. ManualResetEvent ...

  4. django中获取sessionid

    之前在django中一直用session处理一些问题,这次想拿到sessionid数据,发现跟以前的想法不太一样: django中的sessionid要通过下面这种方式取到: session_key ...

  5. 任务队列:celery快速入门及django中celery的用法

    文章目录 一.celey的简介 1.1 celery的工作机制 1.2 安装celery(5.2版本) 二.celery快速入门 2.1 选择broker 2.2 celery的简单使用 2.2.1 ...

  6. php中__FILE__常量用法简介

    php中__FILE__常量用法简介 http://blog.csdn.net/xbei07/article/details/5616020#comments出处 1.php中的__FILE__常量返 ...

  7. Matlab中 intlinprog函数用法简介

    Matlab中 intlinprog函数用法简介 本来想要自己亲手写一遍的,发现了一优质博文基本上跟我做过的例题大差不差,所以就直接放上链接. 参考链接 https://www.cnblogs.com ...

  8. php中dump怎么使用,php中var_dump()方法的用法简介

    摘要 腾兴网为您分享:php中var_dump()方法的用法简介,支付旭尊,鑫钱袋,携程,小米音乐等软件知识,以及星票网,dc,新房购置税计算器,听中国app,xbox360,当游游戏盒,蜗牛二手货车 ...

  9. Django中Celery简介

    初识Celery: Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,可将一些耗时的任务放入该消息队列中处理,一些定时任务也可以放入队列中自动执行 ...

最新文章

  1. 第二章 数据类型、运算符与表达式
  2. 震惊!java中日期格式化的大坑!
  3. Node.js建立服务、路径处理与响应
  4. mybatis传入list、array等数据集合的处理
  5. MUI 里js动态添加数字输入框后,增加、减少按钮无效
  6. 云筑网认证_云筑网集采平台怎么录入分包单位
  7. 压测|关于PHP7和5.6的压测对比
  8. PyTorch | 通过torch.eye创建单位对角矩阵 | torch.eye()如何使用?torch.eye()例子 | torch.eye()使用方法
  9. ruhe anzjhuang mysql_Mysql配置安装过程
  10. 洛谷——P3225 [HNOI2012]矿场搭建
  11. erlang 动态编译和加载遇到的问题。
  12. html菜单wodpress,wordpress进阶教程(二十二):初步了解菜单
  13. Javascript四种调用模式中的this指向
  14. 怎样做一个卓越的程序员
  15. 日常推荐大神操作,如何再oracle中delete数据后恢复
  16. Atitit orm 之道 艾龙著 1. 一、ORM的由来 1 2. ORM的组成:      2 3.  常见的ORM框架:      3 4. 、ORM与数据持久化的关系 3 5. Atitit
  17. Atitit 文员招募规范 attilax总结
  18. 分布式文件存储FastDFS之配置Nginx模块
  19. 浏览器中输入localhost或者127.0.0.1 打不开求大神教.
  20. HDU 4512 吉哥系列故事——完美队形I(最长公共上升子序列 LCIS)

热门文章

  1. java poi设置单元格格式为数值_Excel 文本转数值的方法——我找的好苦啊
  2. echart雷达图数据图形的填充颜色_数据可视化,职场数据分析都需要哪些常用的图表?...
  3. python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?
  4. Java MinIO文件上传返回访问路径及访问配置
  5. c#中dateTimePicker怎么获取当前的日期
  6. Juniper CoS 基本配置说明
  7. [CTO札记]第1天:认识人、熟悉环境
  8. Spring 无缝整合 quartz
  9. 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图...
  10. 程序员经常遇见的9大困难你造么?