Django-中间件
- Djano中间件流程
- django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。请求过来,先经过所有的process_request(),到视图函数后,经过所有的process_response返回。
- 但是如果中某一个process_request()有了返回值,找到它自己所对应的process_respons()直接返回。
- 1.10版本之后都是这样的流程,之前的版本,如果process_request()有了返回值,会到最后一个process_respons(),然后返回 。
5个方法
- process_request()、process_response()
#
from import MiddlewareMixin
class M1(MiddlewareMixin):
def process_request(self,request):
print('m1.process_request')
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_response(self, request, response):
print('m2.process_response')
return response
#
MIDDLEWARE = [
'',
..........
'md.M1',
'md.M2',
]
#
def test(request):
print('ok')
return HttpResponse('ok')
# 输出结果
m1.process_request
m2.process_request
ok
m2.process_response
m1.process_response
- process_view()
#
from import MiddlewareMixin
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')
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_response(self, request, response):
print('m2.process_response')
return response
# 输出结果
m1.process_request
m2.process_request
m1.process_view
ok
m2.process_response
m1.process_response
#
from import MiddlewareMixin
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')
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
# 输出结果
m1.process_request
m2.process_request
m1.process_view
m2.process_view
ok
m2.process_response
m1.process_response
#
from import MiddlewareMixin
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
# 输出结果
m1.process_request
m2.process_request
m1.process_view
ok
m2.process_response
m1.process_response
- process_exception()
# 在视图函数中添加错误进行测试
def test(request):
print('ok')
int('test')
return HttpResponse('ok')
#
from import MiddlewareMixin
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
def process_exception(self, request, exception):
print('m1.process_exception')
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
def process_exception(self, request, exception):
print('m2.process_exception')
# 输出结果
m1.process_request
m2.process_request
m1.process_view
m2.process_view
ok
m2.process_exception
m1.process_exception
m2.process_response
m1.process_response
应用
from import MiddlewareMixin
from 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
def process_exception(self, request, exception):
print('m1.process_exception')
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
def process_exception(self, request, exception):
print('m2.process_exception')
return HttpResponse('有错误!')
# 不会报错
# 输出结果
m1.process_request
m2.process_request
m1.process_view
m2.process_view
ok
m2.process_exception
m2.process_response
m1.process_response
- process_template_response()
# 对视图函数的返回值有一定的要求,在函数返回值中有render方法才执行。
#
from import render,redirect,HttpResponse
# Create your views here.
class JsonResponse:
def __init__(self,req,status,msg):
= req
= status
= msg
def render(self):
import json
ret = {
'status': ,
'msg':
}
return HttpResponse((ret))
def test(request):
return JsonResponse(request,True,'错误信息!')
#
from import MiddlewareMixin
from 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
def process_exception(self, request, exception):
print('m1.process_exception')
def process_template_response(self,request,response):
print('m1.process_template_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
def process_exception(self, request, exception):
print('m2.process_exception')
return HttpResponse('有错误!')
# 输出结果
m1.process_request
m2.process_request
m1.process_view
m2.process_view
m1.process_template_response
m2.process_response
m1.process_response