django中间件

中间件

What?

中间件是一个用来处理django请求与响应的框架级别的钩子,是一个轻量、低级别的插件系统。用于在全局范围内改变django的输入输出
说白了,中间件就是一个类视图,类里边包含很多自定义的函数,这些函数的具体功能才是中间件实现的根本

自定义函数

process_request(self, request)
process_view(self, request, view_func, view_args, view_kwargs)
process_template_response(self, request, response)
process_exception(self, request, exception)
process_response(self, request, response)

How?

1. process_request
    1. 执行时间
        在视图函数之前执行
    2. 参数
        request 和视图中的request是同一个
    3. 返回值
        返回None  
        返回response对象   
            不执行后面中间的process_request方法和视图
            直接执行当前值中间件的process_response方法
    4. 执行顺序
        按照注册的顺序执行 
2. process_response    
    1. 执行时间    
    	在视图函数之后执行
    2. request, response
    	request 和视图中的request是同一个
    	response 返回的response对象
    3. 返回值
    	返回response对象
    4. 执行顺序
    	按照注册的倒序执行
3. process_view
    1. 执行时间
    	在视图函数之前,process_request之后执行
    2. 参数
    	view_func  将要执行的视图函数
    	view_args  视图函数的可变长位置参数
    	view_kwargs    视图函数的可变长关键字参数
    3. 返回值
    	返回  None  正常执行 
    	返回  response对象   不执行后面的process_view和视图,直接执行所有中间件的process_response方法
    4。执行顺序
    	按照注册的顺序执行
4. process_exception(有条件触发:有错误才执行)
    1. 执行时间
   		在视图函数之后,process_response之前执行
    2. 参数
    	exception  错误对象
    3. 返回值
    	返回  None  不对错误进行处理,交给下一个中间件进行处理
    	返回  response对象  下一个中间的process_exception不执行,直接执行所有中间件的process_response方法
    4. 执行顺序
    	按照注册的倒序执行
5. process_template_response(条件触发:视图返回的response有render方法)
    1. 执行时间
    	在视图函数之后,process_response之前执行
    2. 参数
    3. 返回值
    	返回 response对象
    4. 执行顺序
    	按照注册的倒序执行,执行完所有的process_template_response方法后执行response.render方法

中间件的执行流程?

请求到达中间件之后,先按照settings中注册的中间件顺序进行执行,然后执行每个中间件的process_request,如果返回值为None,继续执行下一个中间件,如果返回值为HttpResponse对象,不再执行后面的中间件,而是执行当前中间件的process_response方法,将HttpResponse对象返回给浏览器。同理适用于process_view方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值