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
Python - Django - 中间件 process_response的更多相关文章
- Python Django 中间件
在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 中间件的执行流程 1.执行完所有的request方法 到达视图函数. ...
- python Django 中间件介绍
我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下面的MIDDLEWARE配置项,django默认自带的一些中间件: MIDDLEWARE = [ ' ...
- Python - Django - 中间件 process_exception
process_exception(self, request, exception) 函数有两个参数,exception 是视图函数异常产生的 Exception 对象 process_except ...
- Python - Django - 中间件 process_view
process_view 的执行顺序也是按照 settings.py 中的顺序来执行 process_view 在 urls.py 的对应关系之后,在执行视图函数之前执行 如果返回 None,则继续执 ...
- Python - Django - 中间件 process_template_response
process_template_response(self, request, response) 有两个参数,response 是 TemplateResponse 对象(由视图函数或者中间件产生 ...
- Python - Django - 中间件 process_request
process_request 函数是中间件在收到 request 请求之后执行的函数 该函数的执行顺序是按照 settings.py 中中间件的配置顺序执行的 如果该函数返回 None,继续执行后面 ...
- python/ Django之中间件
python/ Django之中间件 一.中间件 中间件共分为: (1)process_request(self,request) (2)process_view(self, request, cal ...
- 【python】-- Django 中间件、缓存、信号
Django 中间件.缓存.信号 一. Django 中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的 ...
- Python自动化之Django中间件
django中间件 Django请求生命周期 中间件中可以定义方法,分别是 process_request(self,request) process_view(self, request, call ...
随机推荐
- spring-boot子模块打包的jar中去掉BOOT-INF文件夹
1.spring-boot maven打包,一般pom.xml文件里会加 <plugin> <groupId>org.springframework.boot</grou ...
- leaf框架(一) 部署leaf
获取 LeafServer: git clone https://github.com/name5566/leafserver 将下下来的文件里server放入gopath的src下,bin里的文件也 ...
- Day01~15 - Python语言基础
Day01 - 初识Python Python简介 - Python的历史 / Python的优缺点 / Python的应用领域 搭建编程环境 - Windows环境 / Linux环境 / MacO ...
- Does Swift support aspect oriented programming?
The foundation of Aspect Oriented Programming is the intercept pattern. We start with a crosscutting ...
- Dart 库预览
容导航 dart:core - numbers, collections, strings, and more dart:async - asynchronous programming dart:m ...
- 编程语言的类型修饰符modifiers
编程语言修饰符,代表语言要素与常规表达不同的语义: 这些语义的不同需要编译器和运行时作出不同的解释: 作用域.访问: 生命周期: 同步异步: 多态: 纯函数: 注解: 懒加载: 编译器合成:
- linux修改镜像
修改为163yum源-mirrors.163.com 1.首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo [root@localhost ~]# m ...
- fitnesse管理引进的jar包
如下:需要引进的jar很多,并且路径都不一样,这样增加删减jar就比较麻烦 !*> setup!define TEST_SYSTEM {slim}!define LOCAL_PATH {C:\ ...
- Trolley slow
- 第六次作业--static关键字、对象
##题目一 ##Computer package Train.Method.TeachDemo.Thread.Fuction; /** * 求n的阶乘算法 * @author 喵 * @date 20 ...