Django【进阶】中间件
2024-10-20 06:25:42
中间件
一、概念
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。
其中process_view方法用的较少,process_template_response方法一般不会用
注意:中间件中的五个方法是固定的,使用时注意参数
二、创建中间件
推荐下面这个方法,上面方法会被废弃(不继承了,直接把继承的内容拿过来)
中间件在settings配置里面注册
三、中间件方法介绍
process_response一定要有返回值的(response),因为中间件的执行顺序,先执行每个中间件的process_request,执行完视图函数后(视图函数执行完也有返回值,返回值为response),再倒着通过每个中间件的process_response把response传递出来,process_response可以对response进行修改,例如:给响应体加上了响应头, 所以response可能和视图函数返回的response不一样
但是process_request不要轻易有返回值,如果有返回值,就直接走到当前中间件的process_response,而不会走到视图函数
process_view方法
如果process_view方法有返回值,则执行顺序为:
process_exception:如果视图函数出错,为了不返回错误页面,就执行这个方法,这个方法可以写一个很友好的返回信息给用户,但是如果视图函数的异常自己捕捉到,就不用了,直接到process_response
四、应用实例:用中间件实现用户验证
所有的页面都验证,如果未登录,就跳转到登录页面,把不需要验证的页面排除到验证之外,如下:
五、中间件概要总结
a. 中间件是一个类,有五个固定的方法
- process_request
- 有,直接执行当前中间件和上方中间件的process_response
- 无
应用: 用户登录授权(排除不需要登录的url)
- process_response
- 必须有返回值
- process_view
- process_exception
- process_tempalte_response
- 必须有返回值
- 必须对象中要有render方法
b. 流程
c. 什么时候用中间件?所有请求统一做处理时使用
- 登录验证
d. 中间件中的方法,可以有任意个
最新文章
- 文件缓存(配合JSON数组)
- 【转】Caffe初试(四)数据层及参数
- 数据类型安全验证都交给TryParse吧
- ListView + PopupWindow实现滑动删除
- mac java目录
- WPF Caliburn.Micro ListView 批量删除,有其他方法的大家一起交流一下
- libCEF总结02字符串
- PDF内容不允许复制的解决方法!
- 进程和cpu的相关知识和简单调优方案
- MRTG开源监控安装手册
- Mate8的麒麟950怎么样? 4个问题待解决
- left ,right ,cross ,full/left outer join/区别 详解
- Thinkphp 3.0版本上传文件加图片缩略图实例解析
- [Python][MachineLeaning]Python Scikit-learn学习笔记1-Datasets&;Estimators
- Sencha Touch对DOM的访问及控制
- ajax提交与上传文件同步
- 华哥倒酒<;区间标记,二分>;
- jmeter系列------参数关联
- hive分区partition(动态和静态分区混合使用; partition的简介)
- dotnet检测类型是否为泛型
热门文章
- linux学习笔记---学习总结②
- 简单的素数问题(C++)
- 对 a = [lambda : x for x in range(3)] 的理解
- Window.open()方法参数详解总结(转)
- 测试理论- the conten of test plan
- .Net com组件操作excel(不建议采用Com组件操作excel)
- Android 实现异步加载图片
- JS设置cookie,读取cookie,删除cookie
- 关于全球唯一标识符GUID
- BZOJ4311 向量(线段树分治+三分)