中间件
中间件是Django请求/响应处理的钩子框架,是一个轻量级的、低级的“插件”系统,用于全局改变Django的输入(请求)或输出(相应处理)。 中间件以类的形式体现 每个中间件组件负责做一些特定的功能。例如,Django包含一个中间件组件AUthenticationMiddleware,它使用会话将用户与请求关联起来。 一般创建一个新的文件夹来写所有的中间件
中间件类必须继承自django.utils.deprecation.MiddlewareMixin类 中间件类必须实现下列五个方法中的一个或者多个:
-
process_request(self,request) 执行路由之前被调用,在每个请求上调用,返回None或HttpResponse对象 -
process_view(self, request, callback, callback_args, callback_kwargs) 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象 -
process_response(self, request, response) 所有响应返回浏览器被调用,在每个请求上调用,返回HttpResponse对象 -
process_exception(self, request, exception) 当处理过程中抛出异常时调用,返回一个HttpResponse对象 -
process_template_response(self, request,response) 在视图函数执行完毕且视图返回的对象中包含render方法时被调用,该方法需要返回实现了render方法的响应对象
注:中间件中的大多数方法在返回None时,表示忽略当前操作进入下一项事件,当返回HttpResponse对象时表示此请求结束,直接返回给客户端
步骤: - 在setting.py中需要注册自定义的中间件 MIDDLEWARE = [ ‘middleware.mymiddleware.MyMW’, ‘middleware.mymiddleware.MyMW2’, ]
def test_MW(request):
print("--- test_mw view in ---")
return HttpResponse('---test_mw---')
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
class MyMW(MiddlewareMixin):
def process_request(self, request):
print('MyMW process_request do ---')
def process_view(self, request, callback, callback_args, callback_kwargs):
print('MyMW process_view do ---')
def process_response(self, request, response):
print('MyMW process_response do ---')
return response
class MyMW2(MiddlewareMixin):
def process_request(self, request):
print('MyMW2 process_request do ---')
def process_view(self, request, callback, callback_args, callback_kwargs):
print('MyMW2 process_view do ---')
def process_response(self, request, response):
print('MyMW2 process_response do ---')
return response
/ 只有MyMW时
MyMW process_request do ---
MyMW process_view do ---
--- test_mw view in ---
MyMW process_response do ---
/ MyMW和MyMW2都有时
/ 进入视图函数之前,按照注册顺序从上至下执行
/ 从视图函数出来之后,按照注册顺序从下至上执行
MyMW process_request do ---
MyMW2 process_request do ---
MyMW process_view do ---
MyMW2 process_view do ---
--- test_mw view in ---
MyMW2 process_response do ---
MyMW process_response do ---
|