博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day062 中间件
阅读量:6345 次
发布时间:2019-06-22

本文共 2175 字,大约阅读时间需要 7 分钟。

中间件: 

  作用: 介于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 MiddlewareMixinclass 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 MiddlewareMixinclass 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 MiddlewareMixinclass 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对象,会报错

  

 

转载于:https://www.cnblogs.com/zty1304368100/p/10496702.html

你可能感兴趣的文章
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
Activiti 实战篇 小试牛刀
查看>>
java中的Static class
查看>>
Xshell 连接CentOS服务器解密
查看>>
[工具类]视频音频格式转换
查看>>
GNS3与抓包工具Wireshark的关联
查看>>
groovy-语句
查看>>
VIM寄存器使用
查看>>
Java VisualVM远程监控JVM
查看>>
nasm预处理器(2)
查看>>
二叉排序树 算法实验
查看>>
Silverlight 5 beta新特性探索系列:10.浏览器模式下内嵌HTML+浏览器模式下创建txt文本文件...
查看>>
YourSQLDba 配置——修改备份路径
查看>>
nginx web服务理论与实战
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
网易音乐版轮播-react组件版本
查看>>