微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

开头是Django UpdateCacheMiddleware,结尾是FetchFromCacheMiddleware

如何解决开头是Django UpdateCacheMiddleware,结尾是FetchFromCacheMiddleware

根据Django建议,UpdateCacheMiddleware应该位于中间件列表的开头,而FetchFromCacheMiddleware应该位于中间件列表的结尾。

我想知道,这是否意味着当我将响应保存到缓存时,它将在所有中间件(在请求阶段然后在响应阶段再次)传递之后,

但是当我从缓存中获取响应时,它已经通过所有中间件之后,然后在响应阶段再次通过所有中间件返回了吗?

这是否意味着所有中间件都应该能够接收到它们已经处理过的响应?

解决方法

因此,有两种方法适用于您在中间件中谈论的内容。

您有process_request,然后有process_response

在您发出请求时,django从上至下依次调用process_request遍历中间件。然后它到达视图,并在返回响应的途中,从下到上处理中间件,调用process_response

特定于您的带有缓存的示例,FetchFromCacheMiddleware包含process_request,而UpdateCacheMiddleware包含process_response

引用文档...

中间件顺序和分层

在请求阶段,在调用视图之前,Django按自上而下的顺序在MIDDLEWARE中定义的顺序应用中间件。

您可以将其视为一个洋葱:每个中间件类都是一个包裹视图的“层”,它位于洋葱的核心。如果请求经过洋葱的所有层(每个人调用get_response将请求传递到下一层),一直到达核心视图,则响应将穿过每一层(以相反的顺序)。

如果其中一层决定在不调用其get_response的情况下短路并返回响应,则该层内的洋葱层(包括视图)都不会看到该请求或响应。响应将仅返回与请求传递通过的层相同的层。

文档在这里; https://docs.djangoproject.com/en/3.1/topics/http/middleware/#middleware-order-and-layering

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。