[toc]
django中间件
1.中间件介绍
1.1 django中间件简介及定义
django中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。
Django的中间件的定义:
#中间件是一个钩子框架,用于Django的请求/响应处理。这是一个轻量级的、底层的“插件”系统,用于全局地改变Django的输入或输出。
Middleware is a framework of hooks into Django’s request/response processing. <br>It’s a light, low-level “plugin” system for globally altering Django’s input or output.
1.2 django中间件的作用
如果你想修改请求,例如被传送到view中的HttpRequest
对象。 或者你想修改view返回的HttpResponse
对象,这些都可以通过中间件来实现。
可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。
说的直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法。
1.3 django中间件的配置项
打开django项目的settings.py文件,看到下面的MIDDLEWARE配置项,django默认自带的一些中间件:
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',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
2.django生命周期
django生命周期
3.自定义中间件
第一步、在django项目下的应用程序目录下创建一个mymiddleware目录,名称任意,在这个目录中再创建一个middleware文件,名称任意,在这个文件中写入以下内容
#导入MiddlewareMixin
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirect,render,HttpResponse
class Auth(MiddlewareMixin):
# 定义一个白名单
white_list = ['/login/', ]
def process_request(self,request):
if request.path in self.white_list:
pass
else:
is_login = request.session.get('is_login')
"""
request.session.get做的事
1.取出cookie中的session随机字符串{'sessionid':'asdfasfpoaijsdgihsdj'}
xx = request.COOKIES.get('sessionid')
2.到数据库中查询这个sessionid对应的那条记录
data = select session_data from django_session where session_key = xx;
3.拿出记录中的session_data数据部分进行解密,并取出数据
dic = sss(data) --> {'is_login':True}
dic.get('is_login') --> True
"""
# 这里写一个pass,就是返回一个None,如果返回是None,则说明通过了请求
if is_login == True:
pass
else:
# return redirect('login')
return HttpResponse('中间件不让你登陆')
第二步、在settings文件中MIDDLEWARE
项的最后边配置中间件
#应用程序名.自定义中间件的目录.自定义中间件py文件.自定义类
'app01.mymiddleware.middleware.Auth'
第三步、视图文件
from django.shortcuts import render,HttpResponse,redirect
from django.urls import reverse
# Create your views here.
def login(request):
if request.method == 'GET':
return render(request,'login.html')
else:
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'admin' and password == 'admin':
request.session['is_login'] = True
request.session['username'] = username
"""
设置session后做的3件事
1 生成随机字符串
2 放到cookie中进行传输
3 将随机字符串和对应数据保存到自己服务端的数据库中
"""
return redirect('home')
else:
return redirect('login')
def home(request):
#这 里获取上边我们自己设置的cookie
# is_login = request.COOKIES.get('is_login')
is_login = request.session.get('is_login')
"""
request.session.get做的事
1.取出cookie中的session随机字符串{'sessionid':'asdfasfpoaijsdgihsdj'}
xx = request.COOKIES.get('sessionid')
2.到数据库中查询这个sessionid对应的那条记录
data = select session_data from django_session where session_key = xx;
3.拿出记录中的session_data数据部分进行解密,并取出数据
dic = sss(data) --> {'is_login':True}
dic.get('is_login') --> True
"""
if is_login == True:
return render(request,'home.html')
else:
return redirect('login')