赞
踩
中间件是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---')
# mymiddleware.py 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 HttpResponse('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 HttpResponse('MyMW 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 ---
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。