中间件版的登录验证需要依靠session,所以数据库中要有django_session表。

urls.py

from django.conf.urls import url
from app01 import viewsurlpatterns = [url(r'^index/$', views.index),url(r'^login/$', views.login, name='login'),
]

views.py

from django.shortcuts import render, HttpResponse, redirectdef index(request):return HttpResponse('this is index')def home(request):return HttpResponse('this is home')def login(request):if request.method == "POST":user = request.POST.get("user")pwd = request.POST.get("pwd")if user == "Q1mi" and pwd == "123456":# 设置sessionrequest.session["user"] = user# 获取跳到登陆页面之前的URLnext_url = request.GET.get("next")# 如果有,就跳转回登陆之前的URLif next_url:return redirect(next_url)# 否则默认跳转到index页面else:return redirect("/index/")return render(request, "login.html")

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="x-ua-compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>登录页面</title>
</head>
<body>
<form action="{% url 'login' %}"><p><label for="user">用户名:</label><input type="text" name="user" id="user"></p><p><label for="pwd">密 码:</label><input type="text" name="pwd" id="pwd"></p><input type="submit" value="登录">
</form>
</body>
</html>

  

middlewares.py

class AuthMD(MiddlewareMixin):white_list = ['/login/', ]  # 白名单balck_list = ['/black/', ]  # 黑名单def process_request(self, request):from django.shortcuts import redirect, HttpResponsenext_url = request.path_infoprint(request.path_info, request.get_full_path())if next_url in self.white_list or request.session.get("user"):returnelif next_url in self.balck_list:return HttpResponse('This is an illegal URL')else:return redirect("/login/?next={}".format(next_url))

在settings.py中注册

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','middlewares.AuthMD',
]

AuthMD中间件注册后,所有的请求都要走AuthMD的process_request方法。
访问的URL在白名单内或者session中有user用户名,则不做阻拦走正常流程;
如果URL在黑名单中,则返回This is an illegal URL的字符串;
正常的URL但是需要登录后访问,让浏览器跳转到登录页面。!:AuthMD中间件中需要session,所以AuthMD注册的位置要在session中间的下方。  

  

 

转载于:https://www.cnblogs.com/robertx/p/10497739.html

django系列8.3--django中间件实现登录验证(1)相关推荐

  1. Django通过中间件实现登录验证demo

    前提:中间件版的登录验证需要依靠session,所以数据库中要有django_session表. 1 from django.conf.urls import url 2 from django.co ...

  2. django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令

    1.安装python3 2.设置python3的环境变量 3.进入命令行模式,输入 pip install django 1.10.3 4.验证是否安装完成 pip show django 5.dja ...

  3. django中间件及中间件实现的登录验证

    1.定义 一个用来处理Django的请求和响应的框架级别的钩子(函数),相对比较轻量级,并且在全局上改变django的输入与输出(使用需谨慎,否则影响性能) 直白的说中间件就是帮助我们在视图函数执行之 ...

  4. Django系列目录

    一:搭建自己的博客系列  搭建自己的博客(一):前期准备  搭建自己的博客(二):创建表,创建超级用户  搭建自己的博客(三):简单搭建首页和详情页 搭建自己的博客(四):优化首页和详情页 搭建自己的 ...

  5. 【愚公系列】2022年01月 Django商城项目13-登录界面-QQ登录功能实现

    文章目录 前言 1.QQ互联开发者申请 2.QQ互联应用申请 3.网站对接QQ登录 一.django实际对接流程 1.创建抽象模型类 2.创建QQ用户模型类 3.注册应用 4.配置QQ登录信息 5.登 ...

  6. Django静态文件处理、中间件及Admin站点

    Django静态文件处理.中间件及Admin站点 文章目录 Django静态文件处理.中间件及Admin站点 一.静态文件 1.简介 2.示例 3.配置静态文件 二.中间件 1.简介 2.示例 3.异 ...

  7. django 默认查询条件_Python之Django系列-创建第一个应用-4

    上一篇:Python之Django系列-创建第一个应用-3 上一篇文章我们介绍了创建项目,打开浏览器访问http://127.0.0.1:8000/polls/,能看见"投票主页视图&quo ...

  8. Django自定义一个简单的中间件,并使用此中间件

    1.在最近做的项目中,需要每个页面访问的时候判断是否登录,没登录的话就跳转到登录页面,因此抽出个公共方法,并自定义个中间件是很有必要的,这样就可以用注解方式去使用这个自定义的中间件,就如Django自 ...

  9. Django 系列博客(二)

    Django 系列博客(二) 前言 今天博客的内容为使用 Django 完成第一个 Django 页面,并进行一些简单页面的搭建和转跳. 命令行搭建 Django 项目 创建纯净虚拟环境 在上一篇博客 ...

最新文章

  1. Ubuntu查看系统位数及版本
  2. Leetcode84 柱状图中最大的矩形 详细的解法
  3. Selenium Grid的使用(分布式测试)
  4. Spring Boot 项目实现热部署
  5. Webstorm中提示Can't use Subversion command line
  6. 【UIKit】UITableView.02
  7. element table 表格设置max-height 没有出现滚动条,多渲染了一列。
  8. apt-get update时卡在 waiting for headers(转)
  9. 史上最硬核文科生,擅长解决数学难题,却视考试成为终生噩梦
  10. 亿些模板【数论数学】
  11. C语言中的自定义类型
  12. vscode 结束_21 个VSCode 快捷键,让代码更快,更有趣
  13. jsp隐式对象_JSP隐式对象
  14. tomcat的url-pattern的源码分析
  15. 使用spring-boot-maven-plugin插件打包spring boot项目
  16. 余额宝宣布开放 中欧基金首批入驻
  17. 让你的网页更精彩 - Javascript 调用MSAgent
  18. java short 写法_Java数据类型short的使用方法
  19. PostgreSQL数据库WAL——RM_HEAP_ID日志记录动作
  20. Python生成彩色字符画

热门文章

  1. 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”解决方法
  2. 老鸟的Python新手教程
  3. java h5服务器推送事件_关于H5+中push推送的服务端代码是怎么写的
  4. SFS2X客户端全部事件详细
  5. ssh等价性的一些疑惑
  6. js读取cookie,js添加cookie,js删除cookie
  7. 转载:图解SSL/TLS协议
  8. Ubuntu snap 定制内核插件
  9. JavaWeb——springMVC异常处理器
  10. AppStore编年史 iOS游戏开发者的变迁路