首页 > 解决方案 > Django UpdateCacheMiddleware 开头和 FetchFromCacheMiddleware 结尾

问题描述

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

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

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

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

标签: djangocachingdjango-middleware

解决方案


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

你有process_request然后process_response

当您发出请求时,django 会从顶部到底部调用中间件process_request。然后它到达视图,并在返回响应的途中,中间件从底部到顶部进行处理,调用process_response.

特定于您使用缓存、FetchFromCacheMiddleware包含process_requestUpdateCacheMiddleware包含的示例process_response

引用文档...

中间件顺序和分层

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

你可以把它想象成一个洋葱:每个中间件类都是一个包裹视图的“层”,它位于洋葱的核心。如果请求通过了洋葱的所有层(每一个调用get_response都将请求传递到下一层),一直到核心的视图,然后响应将通过每一层(以相反的顺序)上回来的路。

如果其中一个层决定短路并返回响应而不调用它get_response,则该层内的洋葱层(包括视图)都不会看到请求或响应。响应只会通过请求传入的相同层返回。

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


推荐阅读