django系列8.3--django中间件实现登录验证(1)
中间件版的登录验证需要依靠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)相关推荐
- Django通过中间件实现登录验证demo
前提:中间件版的登录验证需要依靠session,所以数据库中要有django_session表. 1 from django.conf.urls import url 2 from django.co ...
- django系列 1 :python+django环境搭建 +mac提示找不到manage.py命令
1.安装python3 2.设置python3的环境变量 3.进入命令行模式,输入 pip install django 1.10.3 4.验证是否安装完成 pip show django 5.dja ...
- django中间件及中间件实现的登录验证
1.定义 一个用来处理Django的请求和响应的框架级别的钩子(函数),相对比较轻量级,并且在全局上改变django的输入与输出(使用需谨慎,否则影响性能) 直白的说中间件就是帮助我们在视图函数执行之 ...
- Django系列目录
一:搭建自己的博客系列 搭建自己的博客(一):前期准备 搭建自己的博客(二):创建表,创建超级用户 搭建自己的博客(三):简单搭建首页和详情页 搭建自己的博客(四):优化首页和详情页 搭建自己的 ...
- 【愚公系列】2022年01月 Django商城项目13-登录界面-QQ登录功能实现
文章目录 前言 1.QQ互联开发者申请 2.QQ互联应用申请 3.网站对接QQ登录 一.django实际对接流程 1.创建抽象模型类 2.创建QQ用户模型类 3.注册应用 4.配置QQ登录信息 5.登 ...
- Django静态文件处理、中间件及Admin站点
Django静态文件处理.中间件及Admin站点 文章目录 Django静态文件处理.中间件及Admin站点 一.静态文件 1.简介 2.示例 3.配置静态文件 二.中间件 1.简介 2.示例 3.异 ...
- django 默认查询条件_Python之Django系列-创建第一个应用-4
上一篇:Python之Django系列-创建第一个应用-3 上一篇文章我们介绍了创建项目,打开浏览器访问http://127.0.0.1:8000/polls/,能看见"投票主页视图&quo ...
- Django自定义一个简单的中间件,并使用此中间件
1.在最近做的项目中,需要每个页面访问的时候判断是否登录,没登录的话就跳转到登录页面,因此抽出个公共方法,并自定义个中间件是很有必要的,这样就可以用注解方式去使用这个自定义的中间件,就如Django自 ...
- Django 系列博客(二)
Django 系列博客(二) 前言 今天博客的内容为使用 Django 完成第一个 Django 页面,并进行一些简单页面的搭建和转跳. 命令行搭建 Django 项目 创建纯净虚拟环境 在上一篇博客 ...
最新文章
- Ubuntu查看系统位数及版本
- Leetcode84 柱状图中最大的矩形 详细的解法
- Selenium Grid的使用(分布式测试)
- Spring Boot 项目实现热部署
- Webstorm中提示Can't use Subversion command line
- 【UIKit】UITableView.02
- element table 表格设置max-height 没有出现滚动条,多渲染了一列。
- apt-get update时卡在 waiting for headers(转)
- 史上最硬核文科生,擅长解决数学难题,却视考试成为终生噩梦
- 亿些模板【数论数学】
- C语言中的自定义类型
- vscode 结束_21 个VSCode 快捷键,让代码更快,更有趣
- jsp隐式对象_JSP隐式对象
- tomcat的url-pattern的源码分析
- 使用spring-boot-maven-plugin插件打包spring boot项目
- 余额宝宣布开放 中欧基金首批入驻
- 让你的网页更精彩 - Javascript 调用MSAgent
- java short 写法_Java数据类型short的使用方法
- PostgreSQL数据库WAL——RM_HEAP_ID日志记录动作
- Python生成彩色字符画
热门文章
- 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”解决方法
- 老鸟的Python新手教程
- java h5服务器推送事件_关于H5+中push推送的服务端代码是怎么写的
- SFS2X客户端全部事件详细
- ssh等价性的一些疑惑
- js读取cookie,js添加cookie,js删除cookie
- 转载:图解SSL/TLS协议
- Ubuntu snap 定制内核插件
- JavaWeb——springMVC异常处理器
- AppStore编年史 iOS游戏开发者的变迁路