Django中间件
一、概念
- 是一个类,用来在全局范围内处理请求和响应的一个钩子
二、中间件的五个方法
process_request(self,request)
process_view(self, request, view_func, view_args, view_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)
自定义中间件
- 在app下创建一个模块
from django.utils.deprecation import MiddlewareMixin
class MyMiddle_1(MiddlewareMixin):
def process_request(self, request):
print('MyMiddle_1 中的 process_request')
def process_response(self, request, response):
print('MyMiddle_1 中的 process_response')
return response
class MyMiddle_2(MiddlewareMixin):
def process_request(self, request):
print('MyMiddle_2 中的 process_request')
def process_response(self, request, response):
print('MyMiddle_2 中的 process_response')
return response
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'app01.mymiddle.MyMiddle_1',
'app01.mymiddle.MyMiddle_2'
]
- 在 views.py 写一个视图函数
from django.shortcuts import render, HttpResponse
def test(request):
print('这儿是视图函数')
return HttpResponse('ok')
-
执行时间:在视图函数执行之前执行
-
参数:
request-----是视图函数中用到的request -
执行顺序:按照在
MIDDLEWARE中注册的顺序从上往下执行 -
返回值:
None-----正常流程往后走;HTTPResponse对象-----当前中间件后面中间件的process_request、process_response方法和视图函数都不会执行,只执行当前中间件的process_response方法及之前的中间件的process _response方法
MyMiddle_1 中的 process_request MyMiddle_2 中的 process_request 这儿是视图函数 MyMiddle_2 中的 process_response MyMiddle_1 中的 process_response

2.2 process_response
-
执行时间:在视图函数执行之后执行
-
参数:
request-----> 是视图函数中用到的requestresponse---->是视图函数中返回的response -
执行顺序:按照在
MIDDLEWARE中注册的顺序从下往上执行 -
返回值:必须是
response对象
2.3 process_view
-
执行时间:在
process_request方法及路由匹配之后、在视图函数执行之前执行
-
参数:
-
view_func-------> 要执行的视图函数 -
view_args-------> 视图函数的位置参数 -
view_kwargs----> 视图函数的关键字参数
-
-
执行顺序:按照在
MIDDLEWARE中注册的顺序从上往下执行 -
返回值:
None-----正常流程往后走;
MiddleWare-----1---request
MiddleWare-----2---request
MiddleWare-----1--- <function test at 0x000000000425BD08> # 视图函数test
MiddleWare-----1--- ()
MiddleWare-----1--- {}
MiddleWare-----2--- <function test at 0x000000000425BD08>
MiddleWare-----2--- ()
MiddleWare-----2--- {}
这儿是视图函数
MiddleWare-----2---response
MiddleWare-----1---response

2.4 process_exception
-
执行时间:在视图函数之后,
process_response之前,有异常时才会触发 -
参数:exception-----错误信息对象
-
执行顺序:按照在
MIDDLEWARE中注册的顺序从下往上执行 -
返回值:None-------正常往后走;返回
HTTPResponse对象,注册顺序之前的中间件的process_exception方法不会执行,会执行所有中间件的process_response方法
2.5 process_template_response
-
执行时间:在视图函数之后,
process_response之前,response对象有render方法时才会触发 -
参数
-
执行顺序:按照注册顺序倒着执行
-
返回值:返回
response
本文来自博客园,仅供参考学习,如有不当之处还望不吝赐教,不胜感激!转载请注明原文链接:https://www.cnblogs.com/rong-z/p/10009864.html
作者:cnblogs用户
浙公网安备 33010602011771号