Django中间件 (middleware)
中间件是处理django的请求和响应的框架级别的钩子,本质是一个类(直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作)
由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。
定义的中间件需要注册
django中请求响应流程

1.中间件定义的五个方法:
- process_request(self,request)
- process_response(self, request, response)
- process_view(self, request, view_func, view_args, view_kwargs)
- process_exception(self, request, exception)
- process_template_response(self,request,response)
1.1 process_request
- process_request(self,request)
特征
在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行
- 执行时间: 在执行视图函数之前执行
- 参数: request
- request和视图函数中的的request是一个对象
- 执行顺序:
- 按照注册的顺序进行执行
- 返回值:
- 返回值为none的时候,执行顺序正常
- 返回值如果是HttpResponse, 后面的中间件的process_request、视图函数都不执行,直接执行当前中间件中的process_response方法,再倒序执行之前的中间件中process_response方法。
1.2 process_response
- process_response(self, request, response)
特征
在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行
- 执行时间: 在执行视图函数之后执行
- 参数: request / response
- request 和视图函数中的的request是一个对象
- response 返回给浏览器响应对象(不一定是视图对象,peocess_request也会返回对象)
- 执行顺序:
- 按照注册的顺序,倒序执行
- 返回值:
- HttpResponse:必须返回response对象
- process_request执行流程

1.3 process_view
- process_view(self, request, view_func, view_args, view_kwargs)
特征
在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行
执行时间: 视图函数之前,process_request之后
参数: request
- request 和视图函数中的的request是一个对象
- view_func 视图函数
- view_args 视图函数的位置参数
- view_kwargs 视图函数的关键字参数
执行顺序:
- 按照注册的顺序进行执行
返回值:
- 返回值为none的时候, 执行顺序正常
- 返回值如果是HttpResponse, 后面的中间的process_view、视图函数都不执行,直接执行注册的最后一个中间件中的process_response方法,再倒叙执行之前的中间中process_response方法。
- 执行流程图

1.4process_exception
- process_exception(self, request, exception)
特征
在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行
执行时间((触发条件)): 视图函数之后,视图层面有错时才执行
参数: request/exception
- request 和视图函数中的的request是一个对象
- exception 视图中的错误对象
执行顺序:
- 按照注册的顺序 倒叙执行
返回值:
- 返回值为none的时候, 交给下一个中间件取处理异常,都没有处理交由django处理异常
- 返回值如果是HttpResponse, 后面的中间件的process_exception不执行,直接执行最后一个中间件中的process_response方法,倒叙执行之前的中间中process_response方法。
- 流程图

1.5process_template_response
- process_template_response(self,request,response)
特征
在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行
执行时间((触发条件)): 视图函数之后,视图返回的是一个templateResponse对象(跟render用法类似)
参数: ,request,response
- request 和视图函数中的的request是一个对象
- response templateResponse对象
执行顺序:
- 按照注册的顺序 倒叙执行
返回值:
- HttpResponse:必须返回response对象
- 流程图

2.完整的django请求的生命周期

Django中间件 (middleware)的更多相关文章
- django中间件Middleware
熟悉web开发的同学对hook钩子肯定不陌生,通过钩子可以方便的实现一些触发和回调,并且做一些过滤和拦截. django中的中间件(middleware)就是类似钩子的一种存在.下面我们来介绍一下,并 ...
- Django中间件(Middleware)处理请求
关注公众号"轻松学编程"了解更多. 1.面向切面编程 切点(钩子) 切点允许我们动态的在原有逻辑中插入一部分代码 在不修改原有代码的情况下,动态注入一部分代码 默认情况,不中断传播 ...
- 利用Django中间件middleware解决用户未登录问题(转)
add by zhj: Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middlewar ...
- Python菜鸟之路:Django 中间件
前言 在正式说Django中间件之前需要先了解Django一个完整的request的处理流程.我从其他网站扒了几张图过来. 图片一: 文字流程说明:如图所示,一个 HTTP 请求,首先被转化成一个 H ...
- Django中Middleware中间件
Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...
- Django 详解 中间件Middleware
Django中间件 还是涉及到django的请求生命周期.middle ware 请求穿过中间件到达url,再经过中间件返回给用户. 简单实例 django项目根目录新建一个Middle文件夹,再新建 ...
- django 自定义中间件 middleware
Django 中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强 ...
- Django框架之中间件MiddleWare
Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健 ...
- day54:django:锁和事务&Ajax&中间件Middleware
目录 1.ORM中的锁和事务 2.Ajax 3.中间件:Middleware 3.1 什么是中间件? 3.2 django请求的生命周期 3.3 中间件可以定义的5个方法 3.4 自定义中间件的流程 ...
随机推荐
- 简明Python教程 - 学习笔记
1,第一步 cmd下运行python文件 :python 文件名.(在文件目录下) 退出python解释器:ctrl + z 或 exit() 回车 进入帮助模式:help(),退出:q 或 回车 2 ...
- 谷歌集群数据 clusterdata-2011-2 Cluster workload traces
谷歌集群数据 clusterdata-2011-2 https://github.com/google/cluster-data/blob/master/ClusterData2011_2.md 链接 ...
- C语言中如何输出汉字;如何用C语言汉字编码输出汉字(超全版)
目录 前景提要 方式一: 方式二: 1. 数组方式打印 2. 指针方式打印 3. 优化为while方式 方式三: 1. 使用结构体内数组方式 2. 使用结构体内数组指针方式 (1) 基础写法 (2) ...
- Qt:QTextStream
0.说明 QTextStream提供了读写文本文件的接口. QTextStream可以操作QIODevice, QByteArray 和 QString,调用QTextStream的流操作可以方便的 ...
- Chrome:开发者模式下选取网页元素对应的代码
CTRL+SHIFT+C 或者 左上角的类鼠标图标
- 几行代码把Chrome搞崩溃之:HTML5 MP3录音由ScriptProcessorNode升级成AudioWorkletNode采坑记
关键词: STATUS_ACCESS_VIOLATION AudioContext AudioWorkletNode audioWorklet addModule resume suspended c ...
- Django基础六之cookie和session
Django基础六之cookie和session 目录 Django基础六之cookie和session 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 ...
- DTD与Schema约束
1.DTD:(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法 规则.它是标准通用标记语言.2.XML Schema 是基于XML的DTD替代者 ...
- rancher更新集群证书
进入rancher 等待更新完成 查看证书到期时间 >>>在rancher容器内部执行查看集群证书信息 for i in ls /var/lib/rancher/k3s/server ...
- 4月4日 python学习总结 os pickle logging
1.序列化和反序列化 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickl ...