博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django系列8.3--django中间件实现登录验证(1)
阅读量:5135 次
发布时间:2019-06-13

本文共 2288 字,大约阅读时间需要 7 分钟。

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

urls.py

from django.conf.urls import urlfrom 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":            # 设置session            request.session["user"] = user            # 获取跳到登陆页面之前的URL            next_url = request.GET.get("next")            # 如果有,就跳转回登陆之前的URL            if next_url:                return redirect(next_url)            # 否则默认跳转到index页面            else:                return redirect("/index/")    return render(request, "login.html")

 

login.html

    
登录页面

 

  

middlewares.py

class AuthMD(MiddlewareMixin):    white_list = ['/login/', ]  # 白名单    balck_list = ['/black/', ]  # 黑名单    def process_request(self, request):        from django.shortcuts import redirect, HttpResponse        next_url = request.path_info        print(request.path_info, request.get_full_path())        if next_url in self.white_list or request.session.get("user"):            return        elif 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

你可能感兴趣的文章
『Python CoolBook』Cython_高效数组操作
查看>>
NDK Build 用法(NDK Build)
查看>>
函数__内置函数(reversed,slice,format,ord,chr,ascii,repr)递归,迭代,二分法
查看>>
【数据结构上机练习】5.栈的简单操作(2)
查看>>
洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP
查看>>
virtualbox桥接网卡设置
查看>>
基于JavaScript技术完成单击事件完成显示和隐藏
查看>>
番外篇:根据学习程度划分程序员的级别
查看>>
生命的真谛?
查看>>
cocos2d-x 3.1.1 学习笔记[17] 关于这些活动功能
查看>>
LeetCode——Flatten Binary Tree to Linked List
查看>>
后台还原checkboxlit的是否被选中的属性
查看>>
select框的text与value值的获取(实用版)
查看>>
网页书签
查看>>
intellij idea 12 搭建maven web项目 freemarker + spring mvc
查看>>
cocos2dx3.2 画图方法小修改之 C++ final学习
查看>>
6、vueJs基础知识06
查看>>
反射获取构造方法并运行的快速的方式
查看>>
《疯狂的程序员》七
查看>>
梵讯笔记
查看>>