Python - Django - 中间件 process_response
process_response 函数是执行完 views.py 后执行的函数
process_response 函数有两个参数,一个是 request,一个是 response,response 是视图函数返回的响应对象
process_response 函数的返回值必须是 HttpResponse 对象
middleware_test.py:
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse class Test(MiddlewareMixin):
def process_request(self, request):
print("这是一个中间件 --> test") def process_response(self, request, response):
print("这里是 Test 的 HttpResponse")
return HttpResponse("这是 Test 返回的 HttpResponse") class Test2(MiddlewareMixin):
def process_request(self, request):
print("这是一个中间件 --> test2") def process_response(self, request, response):
print("这里是 Test2 的 HttpResponse")
return HttpResponse("这是 Test2 返回的 HttpResponse")
views.py:
from django.shortcuts import HttpResponse def index(request):
print("这里是 index 页面")
return HttpResponse("这里是主页面 index")
访问,http://127.0.0.1:8000/index/
这里没有返回 index 函数中的内容,而是直接返回 process_response 中的内容
执行结果:
可以看到先执行 process_request,然后执行 views.py,最后执行 process_response
而且 process_request 按照中间件的顺序执行,而 process_response 是反着执行的
process_request 和 process_response 的执行流程:
中间件收到 request 请求后,先执行 process_request 函数,当返回响应时,再执行 process_response 函数
当 process_request 函数返回 HttpResponse 时,就不再执行后面的 process_request 函数,而会去执行 process_response 函数
如上图,中间件 3 返回了 HttpResponse,所以不再执行中间件 4、5、6 的 process_request 函数和 process_response 函数,而是继续执行中间件 3、2、1 的 process_response 函数
middleware_test.py:
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse allow_url = ['/admin/', '/uploads/', '/files/'] class Test(MiddlewareMixin):
def process_request(self, request):
print("这是一个中间件 --> test") def process_response(self, request, response):
print("这里是 Test 的 HttpResponse")
return HttpResponse("这是 Test 返回的 HttpResponse") class Test2(MiddlewareMixin):
def process_request(self, request):
print("这是一个中间件 --> test2")
if request.path_info in allow_url:
return
else:
return HttpResponse("--- Test2 ---") def process_response(self, request, response):
print("这里是 Test2 的 HttpResponse")
return HttpResponse("这是 Test2 返回的 HttpResponse")
访问,http://127.0.0.1:8000/index/
运行结果:
因为 Test2 中 process_request 中返回了 HttpResponse,所以这里只执行了 Test2 的 process_response 方法,而不再去执行后面的中间件 Test1
最新文章
- 《TypeScript 中文入门教程》 1、基础数据类型
- 源码解析-Volley(转自codeKK)
- elasticsearch同义词及动态更新
- XAF ObjectSpace保存时添加记录
- .NET技术在中国为什么老被人嫌弃
- MVC 修饰标签
- Notification通知
- <;转>;如何改变讨好型人格 | 你根本不需要讨好任何人
- 洛谷P1458 顺序的分数 Ordered Fractions
- FileObverse文件观察者的Debug报告
- MFC 消息的分类
- Android ListView 单条刷新方法实践及原理解析
- Alpha阶段Scrum Meeting合集(江山代有才人秃队)
- mvc部分视图转换成html字符串
- 关于Xilinx AXI Lite 源代码分析---自建带AXI接口的IP
- img标签在div里上下居中
- Java转python第一天
- Revit API过滤元素类别(FamilySymbol与FamilyInstance)
- 【教程】ubuntu下安装samba服务器
- 递归、字节流、文件复制_DAY20