django - 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
推荐阅读
- opencv - 在易受攻击的图像 OpenCV Python 上过滤噪声
- python - 使用“:”将伪代码翻译成python
- javascript - 使用 javascript 在真假之间切换 aria-expanded
- python - 使用 python 仅打印一个 json 键响应的值
- python - 为什么在 Windows 上合并 python 中的文件很慢?
- pandas - GroupBy 两个 DataFrame 的不同列之间的公共值
- python-3.x - 转移文本文件所有权python
- python - 如何在python数据框中将一行转换为带有条件的维度
- ios - SwiftUI Textfiled Binding 在 iOS 15 中触发 2 次
- r - pryr::object_size() 嵌套在小标题和/或数据帧中是否表现不佳?