中间件的概念

中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎使用,用不好会影响到性能。

如果你想修改请求,例如被传送到view中的HttpRequest对象。或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。

可能你还想在view执行之前做一些操作,这种情况就可以用middleware来实现。

自定义中间件

---process_request,process_response:

当用户发请求的时候会依次经过所有的中间件,这个时候的请求process_request,最后到达views的函数中,views函数处理后,在一次穿过中间件,这个时候是process_response,最后返回给请求者

上述截图中的中间件都是django中的,我们也可以自己定义一个中间件,我们可以自己写一个类,但是必须继承MiddlewareMixin

需要导入:

1 from django.utils.deprecation import MiddlewareMixin

in views:

1 def index(request):
2
3     print("view函数...")
4     return HttpResponse("OK")

in Mymiddlewares.py:

 1 from django.utils.deprecation import MiddlewareMixin
 2 from django.shortcuts import HttpResponse
 3
 4 class Md1(MiddlewareMixin):
 5
 6     def process_request(self,request):
 7         print("Md1请求")
 8
 9     def process_response(self,request,response):
10         print("Md1返回")
11         return response
12
13 class Md2(MiddlewareMixin):
14
15     def process_request(self,request):
16         print("Md2请求")
17         #return HttpResponse("Md2中断")
18     def process_response(self,request,response):
19         print("Md2返回")
20         return response

结果:

1 Md1请求
2 Md2请求
3 view函数...
4 Md2返回
5 Md1返回

流程图:

---process_view:

1 process_view(self, request, callback, callback_args, callback_kwargs)

Mymiddlewares.py:

 1 from django.utils.deprecation import MiddlewareMixin
 2 from django.shortcuts import HttpResponse
 3
 4 class Md1(MiddlewareMixin):
 5
 6     def process_request(self,request):
 7         print("Md1请求")
 8         #return HttpResponse("Md1中断")
 9     def process_response(self,request,response):
10         print("Md1返回")
11         return response
12
13     def process_view(self, request, callback, callback_args, callback_kwargs):
14         print("Md1view")
15
16 class Md2(MiddlewareMixin):
17
18     def process_request(self,request):
19         print("Md2请求")
20         return HttpResponse("Md2中断")
21     def process_response(self,request,response):
22         print("Md2返回")
23         return response
24
25     def process_view(self, request, callback, callback_args, callback_kwargs):
26         print("Md2view")

结果:

1 Md1请求
2 Md2请求
3 Md1view
4 Md2view
5 view函数...
6 Md2返回
7 Md1返回

process_view如果有返回值,会越过其他的process_view以及视图函数,但是所有的process_response都还会执行.

---process_exception:

1 process_exception(self, request, exception)

Mymiddlewares.py:

 1 class Md1(MiddlewareMixin):
 2
 3     def process_request(self,request):
 4         print("Md1请求")
 5         #return HttpResponse("Md1中断")
 6     def process_response(self,request,response):
 7         print("Md1返回")
 8         return response
 9
10     def process_view(self, request, callback, callback_args, callback_kwargs):
11
12         # return HttpResponse("hello")
13
14         # response=callback(request,*callback_args,**callback_kwargs)
15         # return response
16         print("md1 process_view...")
17
18     def process_exception(self):
19         print("md1 process_exception...")
20
21
22
23 class Md2(MiddlewareMixin):
24
25     def process_request(self,request):
26         print("Md2请求")
27         # return HttpResponse("Md2中断")
28     def process_response(self,request,response):
29         print("Md2返回")
30         return response
31     def process_view(self, request, callback, callback_args, callback_kwargs):
32         print("md2 process_view...")
33
34     def process_exception(self):
35         print("md1 process_exception...")

结果:

1 Md1请求
2 Md2请求
3 md1 process_view...
4 md2 process_view...
5 view函数...
6
7 Md2返回
8 Md1返回

流程图:

当views出现错误时:

转载于:https://www.cnblogs.com/lzmdbk/p/9891243.html

Django组件 中间件相关推荐

  1. Django 组件- 中间件

    11.1 中间件 一.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨 ...

  2. 07 Django组件-中间件

    中间件 方式一:函数式:中间件[middleware],也叫钩子方法[钩子函数],hook Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Djang ...

  3. Django组件-中间件

    中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎使用,用不好会影响到性能. Django默认 ...

  4. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  5. Django的中间件

    Django的中间件 目录 中间件介绍 什么是中间件? 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_ ...

  6. 13 Django之中间件

    一.什么是中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...

  7. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)...

    python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页) 一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 fro ...

  8. django框架--中间件系统

    目录 零.参考 一.中间件的基本理解 二.中间件的系统定位 三.中间件的配置 四.中间件的执行流程 五.中间件与装饰器之间的思考 六.中间件的应用场景 七.内置中间件 八.总结 零.参考 https: ...

  9. 使用模式创建一个面向服务的组件中间件

    引言 在本文中,您将了解面向服务的组件中间件在用于资源有限的语音设备时,在设计阶段所应用的模式.它涵盖了项目的问题上下文,并被看成是一组决定因素,是对相关体系结构远景的一个简要概括.您还会得到一份描述 ...

  10. Django之中间件,csrf跨站伪造请求,auth认证模块

    Django请求生命周期 django的中间件 django的中间件相当于保安,请求的时候要经过django的中间件才能连接django的后端 能用来干什么:能够做网站的全局身份认证,访问频率,权限认 ...

最新文章

  1. 2022-2028年成都餐饮业投资分析及前景预测报告
  2. NIPS 2018 论文解读集锦(11月28日更新)
  3. 模拟键盘 键盘虚拟代码
  4. 安装工程图形算量离我们还多远
  5. Android开发之shape自定义ProgressBar进度条样式
  6. Django ORM 知识点总结
  7. arduino倾斜开关python语言_Arduino小白的学习记录:倾斜开关实验
  8. 统计学习方法-李航(6)
  9. 关于JVM垃圾回收的几个问题
  10. git分支详细讲解,模拟分支开发,为什么使用分支开发
  11. window下默认的汉字模式——GBK
  12. Newton-Raphson算法
  13. QT 与日置、安捷伦测试仪 通讯 232串口 GPIB
  14. easyExcel工具
  15. 关于GPS实际精度比较低,而且频率低,但是无人机GPS定点却定得和钉子一样
  16. 微信小程序之子页面动态修改导航栏标题文字内容
  17. 在计算机中c语言是属于什么作用,C语言属于下列哪一类计算机语言( )
  18. Raspberry Pi 树莓派连接温度传感器DS18B20
  19. Stack Overflow 上 250W 浏览量的一个问题:你对象丢了
  20. 【计算机网络 (谢希仁) 习题题解】第4章 网络层 (1)

热门文章

  1. 粉丝关注数据库表的设计
  2. 归并排序法计算逆序对数
  3. 【转】git使用教程
  4. 面向对象三大特征之多态——Java笔记(七)
  5. SharePoint 设置Library中文档的默认打开方式
  6. HDU-2036 改革春风吹满地 (多边形面积求解)
  7. Java实现FastDFS文件上传、查询、下载和删除
  8. Springboot2.X + screw数据库快速开发文档
  9. JS实现Sql语句格式化效果
  10. 2个div并排自适应宽度