Django 中间件是修改 Django request 或者 response 对象的钩子,可以理解为是介于 HttpRequest 与 HttpResponse 处理之间的一道处理过程。浏览器从请求到响应的过程中,Django 需要通过很多中间件来处理,可以看如下图所示:

使用中间件首先需要在settings.py文件中配置,不然后台也不知道你添加了中间件,只会按照默认的中间件流程进行操作

中间件可以定义四个方法,分别是:
process_request(self,request) #process_request 方法是在视图函数之前执行的
process_view(self, request, view_func, view_args, view_kwargs)#process_view 方法是在视图函数之前,process_request 方法之后执行的
process_exception(self, request, exception)#process_exception 方法只有在视图函数中出现异常了才执行,按照 settings 的注册倒序执行。
在视图函数之后,在 process_response 方法之前执行。
process_response(self, request, response)#process_response 方法是在视图函数之后执行的
这里我先尝试process_request(self,request)以及process_response(self, request, response)
#Middleware.py
from django.utils.deprecation import MiddlewareMixin
class PrintMiddle(MiddlewareMixin):
def process_request(self,request):
print('我是在视图函数之前执行的哟')
def process_response(self, request, response):
print('我是在视图函数之后执行的')
return response
#views.py
def PM(request):
print('正在执行视图函数')
return HttpResponse('hahahaha')
我是在视图函数之前执行的哟
正在执行视图函数
我是在视图函数之后执行的
从下图看,正常的情况下按照绿色的路线进行执行,假设中间件1有返回值,则按照红色的路线走,直接执行该类下的 process_response 方法返回,后面的其他中间件就不会执行。

Django中间件|菜鸟教程
893

被折叠的 条评论
为什么被折叠?



