Django【进阶】中间件
中间件
一、概念
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. 中间件中的方法,可以有任意个