中间件
 

一、概念

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. 中间件中的方法,可以有任意个

最新文章

  1. 文件缓存(配合JSON数组)
  2. 【转】Caffe初试(四)数据层及参数
  3. 数据类型安全验证都交给TryParse吧
  4. ListView + PopupWindow实现滑动删除
  5. mac java目录
  6. WPF Caliburn.Micro ListView 批量删除,有其他方法的大家一起交流一下
  7. libCEF总结02字符串
  8. PDF内容不允许复制的解决方法!
  9. 进程和cpu的相关知识和简单调优方案
  10. MRTG开源监控安装手册
  11. Mate8的麒麟950怎么样? 4个问题待解决
  12. left ,right ,cross ,full/left outer join/区别 详解
  13. Thinkphp 3.0版本上传文件加图片缩略图实例解析
  14. [Python][MachineLeaning]Python Scikit-learn学习笔记1-Datasets&Estimators
  15. Sencha Touch对DOM的访问及控制
  16. ajax提交与上传文件同步
  17. 华哥倒酒<区间标记,二分>
  18. jmeter系列------参数关联
  19. hive分区partition(动态和静态分区混合使用; partition的简介)
  20. dotnet检测类型是否为泛型

热门文章

  1. linux学习笔记---学习总结②
  2. 简单的素数问题(C++)
  3. 对 a = [lambda : x for x in range(3)] 的理解
  4. Window.open()方法参数详解总结(转)
  5. 测试理论- the conten of test plan
  6. .Net com组件操作excel(不建议采用Com组件操作excel)
  7. Android 实现异步加载图片
  8. JS设置cookie,读取cookie,删除cookie
  9. 关于全球唯一标识符GUID
  10. BZOJ4311 向量(线段树分治+三分)