参考文章:https://www.cnblogs.com/wodekaifalog/p/10817275.html

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

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

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

  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'),
]

源码:

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
"""
Decorator for views that checks that the user is logged in, redirecting
to the log-in page if necessary.
"""
actual_decorator = user_passes_test(
lambda u: u.is_authenticated,
login_url=login_url,
redirect_field_name=redirect_field_name
)
if function:
return actual_decorator(function)
return actual_decorator

@login_required(login_url="/login/")

如果用户没有登入,则重定向到settings.LOGIN_URL或者login_url,

如果用户已经登入,则正常执行视图。视图的代码可以安全地假设用户已经登入


django @login_required登录限制的更多相关文章

  1. django @login_required登录限制(2)-返回登陆成功后的页面

    本次要实现的功能是,访问未登录的视图函数,需要先跳转到登录页面,登陆成功在跳转回来. 之前在网上找了很多资料,都没有找到解决方案. 跳转到登录页面很好弄,就是登陆成功跳转回来出了问题,原因是登录后的p ...

  2. 关于Django的登录系统

    首先需要明确的是登录的本质:登录就是服务器确认当前用户的身份,并将数据库中的记录提取匹配 默认的登录系统是用户名密码方式,这种方式很平常,也没什么特别的.这里主要说的是第三方验证登录 通常第三方验证登 ...

  3. django用户登录和注销

    django版本:1.4.21. 一.准备工作 1.新建项目和app [root@yl-web-test srv]# django-admin.py startproject lxysite [roo ...

  4. django 实现登录时候输入密码错误5次锁定用户十分钟

    在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱, 于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个 ...

  5. Django用户登录与注册系统

    一.创建项目 1.1.创建项目和app python manage.py startproject mysite_login python manage.py startapp login 1.2.设 ...

  6. 关于django用户登录认证中的cookie和session

    最近弄django的时候在用户登录这一块遇到了困难,网上的资料也都不完整或者存在缺陷. 写这篇文章的主要目的是对一些刚学django的新手朋友提供一些帮助.前提是你对django中的session和c ...

  7. [py][mx]django处理登录逻辑

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  8. python Django编写登录项目

    Django 目录结构: __init__.py 文件: import pymysql pymysql.install_as_MySQLdb() 注意:如果 import pymysql 的时候报红, ...

  9. Django Ajax登录 防止CSRF

    什么是CSRF 维基百科: 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CS ...

随机推荐

  1. Loj #3042. 「ZJOI2019」麻将

    Loj #3042. 「ZJOI2019」麻将 题目描述 九条可怜是一个热爱打麻将的女孩子.因此她出了一道和麻将相关的题目,希望这题不会让你对麻将的热爱消失殆尽. 今天,可怜想要打麻将,但是她的朋友们 ...

  2. visual studio -- 调试时自动传递给exe入参

    如果你写的main函数接受入参int main(int argc, char* argv[]),则可以 右键工程--属性--调试,在命令行参数中输入入参即可,这些字符串会被直接传递给exe.

  3. 集合类源码(五)Collection之BlockingQueue(LinkedTransferQueue, PriorityBlockingQueue, SynchronousQueue)

    LinkedTransferQueue 功能 全名 public class LinkedTransferQueue<E> extends AbstractQueue<E> i ...

  4. django学习_学生信息管理后台

    一.功能: 实现对学生对个人信息的增删查改 实现后台对所有学生信息的操作 二.此后台采用的是MVC的风格模式进行编码 1.VIEWS部分 from django.http import HttpRes ...

  5. Web应急:门罗币恶意挖矿

    门罗币(Monero 或 XMR),它是一个非常注重于隐私.匿名性和不可跟踪的加密数字货币.只需在网页中配置好js脚本,打开网页就可以挖矿,是一种非常简单的挖矿方式,而通过这种恶意挖矿获取数字货币是黑 ...

  6. 实测搭建jenkins多环境、多分支demo

    一.环境以及工具信息 1. 3台服务器信息 jenkins: 192.168.123.163.serverA:192.168.123.130.serverB :139.198.17.241三台机器都是 ...

  7. mybatis源码/mybatis执行流程源码解析

    https://www.cnblogs.com/cxiaocai/tag/%E9%9D%A2%E8%AF%95%E9%A2%98/public SqlSession session; public S ...

  8. bundler-sfm windows下编译过程中出现的错误

    一.“sysdep1.h”文件缺失 错误提示: fatal error C1083: 无法打开包括文件: “sysdep1.h”: No such file or directory 这些作为这个软件 ...

  9. python高级编程——网络编程(一)

    计算机网络基础 概念:计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计算机的通信.而网络编程就是开发计算机网络应用程序 计算机的通信协议 概念:计 ...

  10. 【开发笔记】- MySQL中limit查询超级慢,怎么办?

    有如下解决方法: (1).通过判断id的范围来分页 limit ; 也得到了分页的数据,但是我们发现如果id不是顺序的,也就是如果有数据删除过的话,那么这样分页数据就会不正确,这个是有缺陷的. (2) ...