########## 中间键
请求-中间键-路由-视图-数据库-模版-视图-中间键-响应
对所有请求做操作的时候,比如IP访问,我们利用中间键屏蔽IP
对某几个函数做操作,可以用装饰器
登陆 crsf 日志 都可以写在中间键里
中间键是一个类
请求的方法—press_request
响应的方法—prcess_response
########### Settings 配置
1 SJF = "user_info"2 3 MIDDLEWARE = [4 'md.md.M1',5 'md.md.M2',6 ]
########### 中间键的创建
1 ########### 继承的类,可以直接粘贴过去用 2 class MiddlewareMixin(object): 3 def __init__(self, get_response=None): 4 self.get_response = get_response 5 super(MiddlewareMixin, self).__init__() 6 7 def __call__(self, request): 8 response = None 9 if hasattr(self, 'process_request'):10 response = self.process_request(request)11 if not response:12 response = self.get_response(request)13 if hasattr(self, 'process_response'):14 response = self.process_response(request, response)15 return response16 17 ########### 自定义的中间键,要继承 MiddlewareMixin18 class M1(MiddlewareMixin):19 20 def process_request(self,request):21 print('m1.process_request')22 return None # 默认就是None,结束当前,继续下面代码23 24 def process_response(self,request,response):25 print('m1.process_response')26 return response27 28 29 class M2(MiddlewareMixin):30 31 def process_request(self,request):32 print('m2.process_request')33 34 def process_response(self,request,response):35 print('m2.process_response')36 return response37 38 执行顺序,m1.request m2.request m2.response m1.response39 如果 m1 没有response 执行顺序40 m1.request m2.request m2.response 41 如果 m1 的response 直接返回了 执行顺序42 m1.request m1.response
实例,通过中间键判断用户是否登陆
1 可以直接在m1.request里面判断请求过来session里面是否有这个用户,没有直接返回登陆 2 from django.conf import settings 3 from django.shortcuts import redirect 4 5 ########### 继承类 6 class M1(MiddlewareMixin): 7 8 def process_request(self,request): 9 # 无返回值:继续执行后续中间件和视图函数10 # 有返回值:执行自己的process_response和上面的response11 # request.xxxx= str: 添加数据,那么每次request里面都会有这个数据12 if request.path_info == "/login/":13 return None # 结束当前,继续后面的代码 m2.request m2.response ……14 15 user_info = request.session.get(settings.SJF)16 if not user_info:17 return redirect('/login/') # 注意重定向次数过多18 19 20 def process_response(self,request,response):21 print('m1.process_response')22 return response23 24 注意:25 settings 中间键顺序,自己写的不要写默认的上边,日志可以写在上面,都可以记录包括默认的