本文共 1774 字,大约阅读时间需要 5 分钟。
中间件就是一个类,使用需要注册这个类。在这个类中有process_request
和process_response
,返回值只有reponse有,如果第一个有的话,就不会走view函数了。
1.9.x版本以下djanjo中间件定义规则
class CommonMiddleware(object):
def process_request(self, request):return Nonedef process_response(self, request, response): return response
最新的1.10.x版本djanjo中间件定义规则----------不是执行的类下的方法,而是执行MiddlewareMixin对象的call方法(方法中调用,process_request等方法)
from djanjo.utils.deprecation import MiddlewareMixin
class CommonMiddleware(MiddlewareMixin):def process_request(self, request):return Nonedef process_response(self, request, response): return response
下面的方法就可以让 中间件 兼容 Django新版本和旧版本------------上面俩种的合并
call 方法会先调用 self.process_request(request),接着执行 self.get_response(request) 然后调用 self.process_response(request, response)
process_view 中的view会把所有的response都会返回,而process_request是只会从第一个上面返回。
下面的代码
from django.utils.deprecation import MiddlewareMixinfrom django.shortcuts import HttpResponseclass M1(MiddlewareMixin): def process_request(self,request): print('m1.process_request') def process_view(self, request, callback, callback_args, callback_kwargs): print('m1.process_view') # response = callback(request,*callback_args,**callback_kwargs) # return response def process_response(self,request,response): print('m1.process_response') return responseclass M2(MiddlewareMixin): def process_request(self,request): print('m2.process_request') def process_view(self, request, callback, callback_args, callback_kwargs): print('m2.process_view') def process_response(self,request,response): print('m2.process_response') return response
request_exception执行流程
应用:1、对一部分数据或者 全部数据进行批量处理的2、缓存的使用,如果缓存用,就使用没有就执行后面的查找转载于:https://blog.51cto.com/sgk2011/2082843