【问题标题】:Django UpdateCacheMiddleware at the beginning and FetchFromCacheMiddleware at the endDjango UpdateCacheMiddleware 开头和 FetchFromCacheMiddleware 结尾
【发布时间】:2021-01-04 10:31:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: django caching django-middleware


    【解决方案1】:

    所以有两种方法适用于您在中间件中谈论的内容。

    你有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

    【讨论】:

    • 我想我的问题可能不清楚。 UpdateCacheMiddleware 将在响应阶段的所有中间件处理响应后保存以缓存响应。在下一次调用中,Fetch 在洋葱中间,它会从缓存中检索这个响应,然后返回它,这将使所有其他中间件在响应阶段再次处理它。没有?
    猜你喜欢
    • 2012-06-12
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多