Python - Django - 中间件 process_view
process_view 的执行顺序也是按照 settings.py 中的顺序来执行
process_view 在 urls.py 的对应关系之后,在执行视图函数之前执行
如果返回 None,则继续执行后面的中间件的 process_view 函数
如果返回 HttpResponse,则不执行后续的 process_view 函数,直接跳到第一个 process_response 函数执行
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") def process_view(self, request, view_func, view_args, view_kwargs):
'''
:param request: 浏览器发来的 request 请求对象
:param view_func: 将要执行的视图函数的名字
:param view_args: 将要执行的视图函数的位置参数
:param view_kwargs: 将要执行的视图函数的关键字参数
:return:
'''
print("这里是 Test 的 process_view 函数")
print(view_func, type(view_func)) class Test2(MiddlewareMixin):
def process_request(self, request):
print("这是一个中间件 --> test2") def process_response(self, request, response):
print("这里是 Test2 的 HttpResponse")
return HttpResponse("这是 Test2 返回的 HttpResponse") def process_view(selfm, request, view_func, view_args, view_kwargs):
print("这个是 Test2 的 process_view 函数")
print(view_func, type(view_func))
views.py:
from django.shortcuts import HttpResponse def index(request):
print("这里是 index 页面")
return HttpResponse("这里是主页面 index")
访问,http://127.0.0.1:8000/index/

运行结果:

执行流程:
首先执行 process_request 函数,然后在执行视图函数之前执行 process_view 函数,然后执行视图函数,最后执行 process_response 函数

process_request 只返回 None,都执行完之后,就匹配路由,找到要执行的视图函数,在执行视图函数之前先执行中间件的 process_view 函数
如果 process_view 返回 None,就继续执行后续的中间件的 process_view 方法,执行完所有的 process_view 函数之后就执行视图函数
如果其中有个 process_view 返回了 HttpResponse,就不执行后续的 process_view 函数,会跳到第一个 process_response 函数,并继续往下执行
例如,中间件 3 的 process_view 返回了 HttpResponse,就不再执行后续的中间件 4、5、6 的中间件了,直接跳到中间件 6 的 process_response 函数,并接着执行中间件 5、4、3、2、1

如果有 process_request 函数返回了 HttpResponse 对象,就不执行后续的 process_request 函数,也不执行 process_view 函数,直接跳转到相应的 process_response 函数执行
Python - Django - 中间件 process_view的更多相关文章
- Python Django 中间件
在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 中间件的执行流程 1.执行完所有的request方法 到达视图函数. ...
- python Django 中间件介绍
我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下面的MIDDLEWARE配置项,django默认自带的一些中间件: MIDDLEWARE = [ ' ...
- Python - Django - 中间件 process_template_response
process_template_response(self, request, response) 有两个参数,response 是 TemplateResponse 对象(由视图函数或者中间件产生 ...
- Python - Django - 中间件 process_exception
process_exception(self, request, exception) 函数有两个参数,exception 是视图函数异常产生的 Exception 对象 process_except ...
- Python - Django - 中间件 process_response
process_response 函数是执行完 views.py 后执行的函数 process_response 函数有两个参数,一个是 request,一个是 response,response 是 ...
- 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 ...
随机推荐
- Word 页码设置教程:如何删除封面和目录的目录?
我们常写的报告大都由封面.目录.正文和附录组成,但是页码通常是从正文开始的,所以下面介绍如何从指定页面开始设置页码. 在介绍之前需要了解一下分隔符的作用.分隔符大体分成分页符和分节符. 分页符细分的几 ...
- mysql-mysqldump
备份(导出)所有数据库的数据和结构(注意:这种方式备份,还原时,无需先创建数据库,可直接导入) mysqldump -u root -p 'password' --all-databases > ...
- Spring Boot 日志管理
Spring Boot 日志管理 网址 Spring Boot 日志管理 http://blog.didispace.com/springbootlog/ Spring Boot快速入门(四)--日志 ...
- CRAP-API——如何在Linux服务器部署CRAP-API教程
前言 之前一直用的eolinker的免费版,但是人数有限,所以想找个免费开源的API管理平台,然后就选择了CRAP-API. 步骤 部署环境 LNMT部署 我的环境是之前部署的是LNMP,后面又增加的 ...
- spark调优——Shuffle调优
在Spark任务运行过程中,如果shuffle的map端处理的数据量比较大,但是map端缓冲的大小是固定的,可能会出现map端缓冲数据频繁spill溢写到磁盘文件中的情况,使得性能非常低下,通过调节m ...
- 浏览器绘图模型的解释:renderObject、renderlayer
先来看这幅经典的图: https://juejin.im/entry/590801780ce46300617c89b8 renderObject相当于iOS 的view renderlayer完成了一 ...
- 使用Google学术简单方法汇总
1 Google学术打不开,简单方法汇总. 2 谷歌学术镜像 http://dir.scmor.com/google/ 3,https://xs.glgoo.net/ 4, https://sch ...
- ES6基础-变量的解构赋值
作者 | Jeskson 来源 | 达达前端小酒馆 解构赋值: 数组的解构赋值,对象的解构赋值,字符串的解构赋值,数值与布尔值的解构赋值,函数参数的解构赋值. 开发环境准备: 编辑器,VS Code, ...
- linux高性能服务器编程 (九) --I/O复用
第九章 I/O复用 I/O复用就是一个线程可以同时监听多个文件描述符,提高程序性能.虽然I/O复用可以同时监听多个文件描述符,但是它本身是阻塞的,如果多个文件描述符准备就绪,如果不采取措施它仍然是串行 ...
- (持续更新) C# 面试技术点、常见SQL技术点 和 解决高并发的相关技术
这篇博客 持续更新. 方便小伙伴们学习与面试前的复习