kol*_*pto 28 django django-middleware
官方文档有点混乱:'之前'和'之后'用于在元组中订购MiddleWare,但在某些地方'之前'和'之后'指的是请求 - 响应阶段.此外,'应该是第一个/最后一个'是混合的,并且不清楚哪个用作"第一个".
我确实理解了它的不同......然而,对于Django的新手而言似乎很复杂.
你能为内置的MiddleWare课程建议一些正确的顺序(假设我们启用了所有这些课程),并且 - 最重要的是 - 解释为什么在其他课程之前/之后?
这是列表,其中包含我设法找到的文档中的信息:
UpdateCacheMiddleware
SessionMiddleware,GZipMiddleware,LocaleMiddlewareGZipMiddleware
UpdateCacheMiddleware:修改'变化:'ConditionalGetMiddleware
CommonMiddleware:使用其'Etag:'标题时USE_ETAGS=TrueSessionMiddleware
UpdateCacheMiddleware:修改'变化:'TransactionMiddleware:我们不需要这里的交易LocaleMiddleware,SessionMiddleware,CacheMiddleware之后的最顶级之一
UpdateCacheMiddleware:修改'变化:'SessionMiddleware:使用会话数据CommonMiddleware
GZipMiddleware,它不会计算gzip压缩内容的电子标签APPEND_SLASH或时它重定向PREPEND_WWWCsrfViewMiddleware
AuthenticationMiddleware
SessionMiddleware:使用会话存储MessageMiddleware
SessionMiddleware:可以使用基于会话的存储XViewMiddlewareTransactionMiddleware
SessionMiddleware配置为使用DB)*CacheMiddleWare不受影响(作为例外:使用自己的数据库游标)FetchFromCacheMiddleware
AuthenticationMiddleware就可以使用了CACHE_MIDDLEWARE_ANONYMOUS_ONLYFlatpageFallbackMiddleware
TransactionMiddleware (是吗?)RedirectFallbackMiddleware
TransactionMiddleware (是吗?)(我将在此列表中添加建议,以便在一个地方收集所有这些建议)
最困难的部分是在设置顺序时必须同时考虑两个方向。我想说这是设计中的一个缺陷,我个人会选择单独的request中间件response订单(这样你就不需要像FetchFromCacheMiddleware和 那样的黑客攻击UpdateCacheMiddleware)。
但是……唉,现在就是这样了。
无论哪种方式,这一切的想法都是您的请求按自上而下的顺序传递 和 的中间件process_request列表process_view。它会以相反的顺序传递您的process_response响应process_exception。
这意味着UpdateCacheMiddleware任何更改VaryHTTP 请求中标头的中间件都应该位于它之前。如果您在此处更改顺序,则某些用户可能会获得其他用户的缓存页面。
如何知道Vary标头是否被中间件更改了?您可以希望有可用的文档,或者只是查看源代码。这通常是很明显的:)
| 归档时间: |
|
| 查看次数: |
4150 次 |
| 最近记录: |