【问题标题】:Browser delay with changing content of the page in django admin (caching, middleware, python/django)浏览器延迟在 django admin 中更改页面内容(缓存、中间件、python/django)
【发布时间】:2012-08-09 14:35:37
【问题描述】:

我在 django 的项目中缓存了一个奇怪的问题。

我可以在 django-admin 中编辑我的页面内容。当我这样做并刷新站点时-什么都没有发生。我必须等待几分钟才能进行更改。有趣的是,当我更改浏览器(或计算机)时 - 我不必等待 - 更改就开始了。是django,浏览器的问题还是什么?是否可以设置 setting.py 立即获取更改?

顺便说一句,我已经发现当我关闭“django.middleware.cache.FetchFromCacheMiddleware”时 - 问题消失了,但我不想关闭缓存......

有什么想法吗?

【问题讨论】:

标签: django caching django-admin browser-cache django-middleware


【解决方案1】:

启用缓存中间件后,Django 会缓存渲染的模板。当发出下一个请求时,Django 会检查模板的缓存,如果存在,它会返回 304 Not Modified 而不是正常的 200 Found HTTP 响应。这会告诉您的浏览器将其从缓存中拉出,而不是再次从服务器中拉出。 (实际上比这复杂得多,但我正在简化)。

总之,这就是 Django 中缓存的工作方式。如果您不希望这种行为,那么您可以禁用缓存(不是缓存中间件),方法是告诉它使用DummyCache 后端:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}

这将导致 Django 总是返回 200 和一个新的副本,因为它永远找不到缓存的副本。您还可以在 settings.py 中添加以下设置:

CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True

然后,如果您已登录(通过管理员或其他方式),则响应会有所不同,并始终返回一个新副本。但是,如果您有任何面向公众的登录功能,这也会影响您网站的普通用户。

【讨论】:

  • 一点也不。这是理想的行为。发送正确的 304 Not Modified 响应代码可以使您的站点更高效,并且能够更好地处理其他请求。要是每个网站都运行得这么好就好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 2015-07-13
  • 2020-12-08
相关资源
最近更新 更多