day062 中间件
中间件:
作用: 介于request和response之间的一到处理过程,相对比较轻量级,并且在全局上改变django的输入与输出,因为改变的是全局,所以需要谨慎使用,用不好会影响到性能.
当用户发送请求的时候会依次经过所有的中间件,这是红请求时process_request,最后到达views函数中,views函数处理后,会依次穿过中间件,这个时候是process_response,最后返回给请求者.
中间件的位置在settings配置,MIDDLEWARE中, 按照从上往下的顺序执行:

自定义中间件:
上图的中间件是django自带的中间件,我们也可以自定义中间件,即写一个类,但是这个类必须继承MiddlewareMixin.
此时还要在settings中的MIDDLEWARE中,最下面加上你自定义的中间件:
''middlewares.MD1'' ,
''middlewares.MD2'' , 这里的MD1和MD2是你写的类名
自定义中间件实例
目录: 在项目中创建一个包(文件夹),随便起名字,一般我们都起名叫utils包里面,表示一个公共组件,创建一个py文件,随便起名,例如我们起名叫middlewares.py .
from django.utils.deprecation import MiddlewareMixin class mdware(MiddlewareMixin):
#自定义中间件,不是必须要有下面这两个方法,有request方法说明请求来了要处理,有response方法说明响应出去需要处理,不是非要写这两个方法,如果没写process_response,那么会一层一层
的往上找,那个中间件有process_response方法就返回对象给哪个中间件
def process_request(self,request):
print('md1中的 process_request') def process_response(self,request,response):
print('md2中的 process_response')
return response
#此时必须要return response, 这里类比于跑接力的接力棒
process_request
process_request有一个参数,就是request,这个request和视图函数中的request是一样的,如果没有返回值,就按照正常流程走,如果返回了一个Httpresponse,django将不会执行视图函数,而将对应的Httpresponse对象返回给浏览器.
from django.utils.deprecation import MiddlewareMixin class md1(MiddlewareMixin):
def process_request(self,request):
print(" md1中的process_request") class md2(MiddlewareMixin):
def process_request(self,request):
print("md2中的process_request ")
process_response
process_response有两个参数,一个是request,另一个是response , request和之前是一样的,response是视图函数返回的Httpresponse对象,该方法的返回值也必须是Httpresponse对象.
from django.utils.deprecation import MiddlewareMixin class MD1(MiddlewareMixin):
def process_request(self,request):
print('MD1中的process_request') def process_response(self,request,response): #request和response两个参数必须有
print('MD1中的process_response')
return Httpresponse('ojbk') class MD2(MiddlewareMixin):
def process_request(self,request):
print('MD2中的process_request') def process_response(self,request,response):
print('MD1中的process_response')
return response #必须返回response,不然上层中间件没有拿到HTTPresponse对象,会报错
day062 中间件的更多相关文章
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”
DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...
- ASP.NET Core 中间件之压缩、缓存
前言 今天给大家介绍一下在 ASP.NET Core 日常开发中用的比较多的两个中间件,它们都是出自于微软的 ASP.NET 团队,他们分别是 Microsoft.AspNetCore.Respons ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理
.NET Core中间件的注册和管道的构建(1)---- 注册和构建原理 0x00 问题的产生 管道是.NET Core中非常关键的一个概念,很多重要的组件都以中间件的形式存在,包括权限管理.会话管理 ...
- 从中间件的历史来看移动App开发的未来
在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...
随机推荐
- python安装包API文档
在python开发过程中,经常会使用第三方包,或者内置的包. 那么这些包,具体有哪些选项,有哪些方法,你知道吗?下面介绍一种万能方法. 使用命令:<注意,命令里python显示的API版本是根据 ...
- linux----------安装Supervisor是用Python开发的一套通用的进程管理程序
1.linux环境必须安装 python 2.yum install python-setuptools 3.获取supervisor包 wget https://pypi.python.org/pa ...
- CentOS 7 通过SQLmap进行SQL注入
安装SQLmap: IP:192.168.94.11 渗透测试演练系统DVWA: IP:192.168.94.111 通过SQLmap检测SQL注入漏洞 : 1.安装SQLmap漏洞查看工具 2.安装 ...
- java poi 合并 word文档
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import jav ...
- C#计算两个时间年份月份差
C#计算两个时间年份月份差 https://blog.csdn.net/u011127019/article/details/79142612
- /* * 有五个学生,每个学生有3门课的成绩,从键盘输入以上数据 *(包括学生号,姓名,三门课成绩),计算出平均成绩, *将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。 */
1.Student类:类中有五个变量,分别是学号,姓名,三门成绩 package test3; public class Student { private int num; private Stri ...
- MySQL插入更新_ON DUPLICATE KEY UPDATE
前提:操作的表具有主键或唯一索引 INSERT INTO:表中不存在对应的记录,则插入:若存在对应的记录,则报错: INSERT INTO IGNORE:表中不存在对应的记录,则插入:若存在对应的记录 ...
- Python 互斥锁
互斥锁Mutex的使用 多个线程处理共享数据,数据会出现问题: 2.7之前每100指令切换一次GIL锁,线程就会sleep,线程会把前100条处理指令存放在CPU缓存内,切换GIL锁后放入另外一个线程 ...
- Shell read交互
read语句:设定客户端交互的任意输出值. 参数: -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符. -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标 ...
- TCP之种种连接异常
1. connect出错: (1) 若TCP客户端没有收到syn分节的响应,则返回ETIMEOUT错误:调用connect函数时,内核发送一个syn,若无响应则等待6s后再发送一个,若仍然无响应则等待 ...