Django:中间件补充

在django中是可以有多个中间件的,process_request和process_response执行的顺序时相反的,就是process_request按照123执行,process_response就会按照321执行。当process_request的返回值为None时,就继续执行下一个,就像上面说的。而当process_request返回一个httpresponse对象时,不再继续执行后续的中间件(后续中间件的process_request和process_response都不会执行)或视图函数。

中间件的执行顺序是在settings.py文件中,由MIDDLEWARE设置列表中的顺序决定的。Django会按照这个列表的顺序执行中间件。例如,上图的中间件执行顺序是MyMd1,MyMd2,MyMd3。

知道了这么多,现在引入一个问题,在process_requset执行和完成前,路由匹配是否已经执行?接下来会直接执行视图函数吗?

在全部的中间件的process_requset全部执行完后才会进行路由匹配,而且如果中间件类定义了process_view方法的话,再路由匹配后会先依次执行process_view方法,最后再去执行视图函数。

那么,现在就有一个疑问,明明已经有了process_request了,为什么还有有一个process_view呢?

 我们就要看这两个方法的区别了,process_request是在路由匹配前,process_view实在路由匹配后,因为实在匹配后,process_view已经拿到相应的要执行的视图了,process_request却没有。很明显,process_request主要用于全局的请求处理;process_view主要用于视图特定的请求处理。

如果process_view的返回值为httpresponse对象时,之后的process_view方法和视图函数都不会执行了,但是会按正常顺序(相应process_request的倒叙)全部执行。

 本人也处于学习阶段,若有错位与不足请指出。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我DPT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值