Django组件 中间件
中间件的概念
中间件是介于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组件 中间件相关推荐
- Django 组件- 中间件
11.1 中间件 一.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨 ...
- 07 Django组件-中间件
中间件 方式一:函数式:中间件[middleware],也叫钩子方法[钩子函数],hook Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Djang ...
- Django组件-中间件
中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎使用,用不好会影响到性能. Django默认 ...
- 浅谈Django的中间件与Python的装饰器
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
- Django的中间件
Django的中间件 目录 中间件介绍 什么是中间件? 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_ ...
- 13 Django之中间件
一.什么是中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)...
python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页) 一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 fro ...
- django框架--中间件系统
目录 零.参考 一.中间件的基本理解 二.中间件的系统定位 三.中间件的配置 四.中间件的执行流程 五.中间件与装饰器之间的思考 六.中间件的应用场景 七.内置中间件 八.总结 零.参考 https: ...
- 使用模式创建一个面向服务的组件中间件
引言 在本文中,您将了解面向服务的组件中间件在用于资源有限的语音设备时,在设计阶段所应用的模式.它涵盖了项目的问题上下文,并被看成是一组决定因素,是对相关体系结构远景的一个简要概括.您还会得到一份描述 ...
- Django之中间件,csrf跨站伪造请求,auth认证模块
Django请求生命周期 django的中间件 django的中间件相当于保安,请求的时候要经过django的中间件才能连接django的后端 能用来干什么:能够做网站的全局身份认证,访问频率,权限认 ...
最新文章
- 2022-2028年成都餐饮业投资分析及前景预测报告
- NIPS 2018 论文解读集锦(11月28日更新)
- 模拟键盘 键盘虚拟代码
- 安装工程图形算量离我们还多远
- Android开发之shape自定义ProgressBar进度条样式
- Django ORM 知识点总结
- arduino倾斜开关python语言_Arduino小白的学习记录:倾斜开关实验
- 统计学习方法-李航(6)
- 关于JVM垃圾回收的几个问题
- git分支详细讲解,模拟分支开发,为什么使用分支开发
- window下默认的汉字模式——GBK
- Newton-Raphson算法
- QT 与日置、安捷伦测试仪 通讯 232串口 GPIB
- easyExcel工具
- 关于GPS实际精度比较低,而且频率低,但是无人机GPS定点却定得和钉子一样
- 微信小程序之子页面动态修改导航栏标题文字内容
- 在计算机中c语言是属于什么作用,C语言属于下列哪一类计算机语言( )
- Raspberry Pi 树莓派连接温度传感器DS18B20
- Stack Overflow 上 250W 浏览量的一个问题:你对象丢了
- 【计算机网络 (谢希仁) 习题题解】第4章 网络层 (1)