概念: 中间件是一个类 定义: 想要对所有的请求做统一操作时,用中间件。(对大量请求中的几个做统一操作时除外) 只有对少量的视图函数做操作时,用装饰器。 任务: 1. 对用户请求记录日志(面试不需要说) 2. 用户登录验证(只有login) 梳理: 1. 类 - 继承MiddlewareMixin - 两个方法 process_request (返回值可以设置也可不设置) process_response,必须设置返回值
2. 自定义设置中间件步骤
1.在app01下创建middleware文件,再在middleware文件下创建auth.py
2.auth.py文件内容
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirect,HttpResponse class M1(MiddlewareMixin): def process_request(self,request):
#函数没有返回值时,返回None,表示继续往下执行
#如果有返回值,则执行自己的response以及以上的response。 if request.path_info =="/login1/": return None user_info=request.session.get("user_info") if not user_info: return redirect("/login1/") def process_response(self,request,response): return response
3.配置settings中间件 MIDDLEWARE = [ ... ‘app01.middleware.auth.M1‘, ]
3. 示例: 1. 对用户请求记录日志() 2. 用户登录验证 (只有login) 3. 权限验证
4.如果自定义俩个中间件时,请求顺序为
M1(process_request)-->M2(process_request)-->...-->M2(process_response)-->M1(process_response)
以上操作步骤见下图:
如果process_request有返回值时: