浏览器在django admin中更改页面内容的延迟(缓存,中间件,python / django)

时间:2012-08-09 14:35:37

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

我在django的项目中有一些奇怪的问题。

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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

然后,如果您已登录(通过管理员或其他方式),响应将因此而异,并始终返回新的副本。但是,如果您有任何面向公众的登录功能,这将影响您网站的普通用户。