标签:中间件
中间件就是一个类,使用需要注册这个类。在这个类中有process_request
和process_response
,返回值只有reponse有,如果第一个有的话,就不会走view函数了。1.9.x版本以下djanjo中间件定义规则
class CommonMiddleware(object):
def process_request(self, request):
return None
def 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 None
def 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 MiddlewareMixin
from django.shortcuts import HttpResponse
class 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 response
class 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、缓存的使用,如果缓存用,就使用没有就执行后面的查找
标签:中间件
原文地址:http://blog.51cto.com/sgk2011/2082843