Django:除非输出已更改,否则缓存?

时间:2011-03-01 14:50:55

标签: django caching

这是一个对HTTP缓存知之甚少的人的新手问题:)

我正在使用Django和@never_cache装饰器。

有没有办法可以指示浏览器缓存页面,除非内容已更改,在这种情况下浏览器应重新加载页面?

感谢。

2 个答案:

答案 0 :(得分:4)

我不赞同Dominic,并且有一个非常好的理由来生成页面,看看它是否已经改变并且如果没有改变则扔掉它 - 这就是为了避免需要通过互联网传输整个页面。只有你的页面生成起来相当便宜并且相当大,这才有意义,但它可以很快获胜。

执行此操作的机制是ETag标头。 Django对此有很好的支持,只需在settings.py中设置USE_ETAGS,您就可以在适当的情况下在所有页面上返回304 Not Modified响应。

答案 1 :(得分:3)

我认为阅读这将是一个很好的起点:

http://www.eflorenzano.com/blog/post/drop-dead-simple-django-caching/

摘录:

  

缓存容易搞砸。通常这是一个手动过程,容易出错且乏味。它实际上很容易缓存,但知道何时使哪些缓存变得更加困难。 [...]基本思想是每个Django模型都有一个主键,这是一个很好的缓存密钥。使用这个基本思想,我们可以以更加确定的方式自动覆盖相当大的缓存用例。