Django通过中间件实现登录验证demo
前提:中间件版的登录验证需要依靠session,所以数据库中要有django_session表。
1 from django.conf.urls import url 2 from django.contrib import admin 3 from app01 import views 4 5 urlpatterns = [ 6 url(r'^admin/', admin.site.urls), 7 url(r'^login/$', views.login, name='login'), 8 url(r'^index/$', views.index, name='index'), 9 url(r'^home/$', views.home, name='home'), 10 ]
urls.py
1 from django.shortcuts import render, HttpResponse, redirect 2 3 4 def index(request): 5 return HttpResponse('this is index') 6 7 8 def home(request): 9 return HttpResponse('this is home') 10 11 12 def login(request): 13 if request.method == "POST": 14 user = request.POST.get("user") 15 pwd = request.POST.get("pwd") 16 17 if user == "jason" and pwd == "jason666": 18 # 设置session 19 request.session["user"] = user 20 # 获取跳到登陆页面之前的URL 21 next_url = request.GET.get("next") 22 # 如果有,就跳转回登陆之前的URL 23 if next_url: 24 return redirect(next_url) 25 # 否则默认跳转到index页面 26 else: 27 return redirect("/index/") 28 return render(request, "login.html")
views.py
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>登录页面</title> 6 </head> 7 <body> 8 <form action="{% url 'login' %}" method="post"> 9 {% csrf_token %} 10 <p> 11 <label for="user">用户名:</label> 12 <input type="text" name="user" id="user"> 13 </p> 14 <p> 15 <label for="pwd">密 码:</label> 16 <input type="text" name="pwd" id="pwd"> 17 </p> 18 <input type="submit" value="登录"> 19 </form> 20 </body> 21 </html>
login.html
1 from django.utils.deprecation import MiddlewareMixin 2 3 4 class AuthMD(MiddlewareMixin): 5 white_list = ['/login/', ] # 白名单 6 black_list = ['/black/', ] # 黑名单 7 8 def process_request(self, request): 9 from django.shortcuts import redirect, HttpResponse 10 11 next_url = request.path_info 12 print(request.path_info, request.get_full_path()) 13 # 黑名单的网址限制访问 14 if next_url in self.black_list: 15 return HttpResponse('This is an illegal URL') 16 # 白名单的网址或者登陆用户不做限制 17 elif next_url in self.white_list or request.session.get("user"): 18 return 19 else: 20 return redirect("/login/?next={}".format(next_url))
mymiddlewares.py
1 MIDDLEWARE = [ 2 'django.middleware.security.SecurityMiddleware', 3 'django.contrib.sessions.middleware.SessionMiddleware', 4 'django.middleware.common.CommonMiddleware', 5 'django.middleware.csrf.CsrfViewMiddleware', 6 'django.contrib.auth.middleware.AuthenticationMiddleware', 7 'django.contrib.messages.middleware.MessageMiddleware', 8 'django.middleware.clickjacking.XFrameOptionsMiddleware', 9 'app01.mymiddlewares.AuthMD' 10 ]
settings注册中间件
AuthMD中间件注册后,所有的请求都要走AuthMD的process_request方法。
如果URL在黑名单中,则返回This is an illegal URL的字符串;
访问的URL在白名单内或者session中有user用户名,则不做阻拦走正常流程;
正常的URL但是需要登录后访问,让浏览器跳转到登录页面。
注:AuthMD中间件中需要session,所以AuthMD注册的位置要在session中间的下方。
转载于:https://www.cnblogs.com/changwentao/p/9669691.html
Django通过中间件实现登录验证demo相关推荐
- django系列8.3--django中间件实现登录验证(1)
中间件版的登录验证需要依靠session,所以数据库中要有django_session表. urls.py from django.conf.urls import url from app01 im ...
- django框架下后台登录验证
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.中间件的设置 二.登录与退出 三,添加验证码 总结 前言 对于后台管理页面,需要设置 1.中间件:用来防止用户未登 ...
- django中间件及中间件实现的登录验证
1.定义 一个用来处理Django的请求和响应的框架级别的钩子(函数),相对比较轻量级,并且在全局上改变django的输入与输出(使用需谨慎,否则影响性能) 直白的说中间件就是帮助我们在视图函数执行之 ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)...
python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页) 一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 fro ...
- Django的中间件
Django的中间件 目录 中间件介绍 什么是中间件? 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_ ...
- Django中间件——实现登陆验证
目录 中间件(MiddleWare) 定义 内置的六个切点(钩子函数) 自定义中间件 规则 实例之--登录验证 中间件(MiddleWare) 定义 面向切面编程(IoC), 为开发者提供了一种无侵入 ...
- Django 重写authenticate实现输入账号、邮箱、手机号登录验证
介绍 authenticate原本是账号和密码登录,在密码对给出的用户名合法的情况下返回一个 User 对象. 如果密码不合法,authenticate()返回None.重写该方法后,实现输入账号.邮 ...
- Django之使用自定义用户表(AbstractUser)/自定义登录验证(jwt)/获取当前登录用户
基本步骤: 一.自定义用户表: 1.自定义的用户表继承AbstractUser: 2.settings.py添加配置,指向用户表:AUTH_USER_MODEL = 'myUser.Account'( ...
- Django之中间件
一.CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上第二种 @method_decorator(login_auth,name='get') 加在类上第三种 @met ...
最新文章
- 基于 OpenCV 和 OpenPose 的棒球挥杆人体姿势估计
- 【python】app未注册用户自动筛选
- android qq 进程保活,Android保活从入门到放弃:乖乖引导用户加白名单吧(附7大机型加白示例)...
- 在WebGL场景中进行棋盘操作的实验
- 测试AtomicInteger与普通int值在多线程下的递增操作
- python软件设置代码字体的大小_Pycharm4.5设置字体大小以及背景颜色的方法
- 【PAT甲】1007 Maximum Subsequence Sum (25分),求最大字段和及区间
- Cimage类的介绍及使用
- IT大公司面试流程与总结
- LLVM 学习(二) -LLVM IR 语法理论学习
- 《麻省理工学院公开课:人工智能》笔记四
- JavaScript图片旋转缩放、像素矩阵获取
- 图像宽度所占字节必须是4的倍数详解
- 2020年杭州社保个人最低交多少
- MapGIS K9三维TDE平台插件开发第一个插件程序(新手入门必看)
- Golang和HTTPS在网站前端接入里的作用
- 计算机窗口颜色不能自定义,用RBG颜色设置自定义颜色
- 第六十九章 SQL函数 JSON_OBJECT
- day11学习 前端HTML网页基本结构、标签及超链接的使用、内联框架
- win10 WSL运行32位程序