如何禁用Django/mod_WSGI页面缓存

Tra*_*vis 9 python apache django caching mod-wsgi

我通过mod_wsgi在Apache中运行Django.我相信Django正在缓存我的服务器端页面,这导致一些功能无法正常工作.

我有一个倒数计时器,通过获取当前服务器时间,确定剩余倒计时时间,并将该数字输出到HTML模板.然后,javascript倒计时器接管并运行用户的倒计时.

当用户刷新页面或使用倒数计时器导航到不同的页面时,会出现问题.计时器似乎偶尔跳到不同的时间,通常在每次刷新时反复回到同一时间.

使用HTTPFox,页面没有从我的浏览器缓存加载,所以它看起来像Django或Apache正在缓存页面.有没有办法禁用此功能?我不会有足够的流量来担心缓存脚本输出.或者我为什么会这样做完全错了?

[编辑]从下面的帖子看,在Django中看起来禁用了缓存,这意味着它必须在其他地方发生,也许在Apache中?

[编辑]我对正在发生的事情有一个更全面的描述:对于服务器的前7个(或左右)请求,页面由脚本呈现并返回,尽管这7个页面中的每个页面似乎都被高速缓存,因为它出现以后.在第8个请求中,服务器提供第一页.在第9个请求中,它提供第二页,依此类推.这将一直持续到我重新启动apache,然后重新开始进程.

[编辑]我已经将mod_wsgi配置为一次只运行一个进程,这会导致计时器在每种情况下重置为相同的值.有趣的是,我的页面上有另一个组件,在每个请求上显示一个随机图像,使用顺序('?'),并且每次都刷新不同的图像,这表明缓存发生在Django而不是Apache中.

[编辑]根据之前的编辑,我回过头来查看了相关的views.py文件,发现倒计时开始变量是在视图函数之外的模块中全局设置的.在视图函数中移动该设置解决了问题.所以事实证明它毕竟不是一个缓存问题.感谢大家对此的帮助.

Joh*_*ett 7

根据我在Apache中使用mod_wsgi的经验,它们极不可能导致缓存.有几件事要尝试:

  1. 您的计算机和Web服务器之间可能有一些代理服务器正确或不适当地缓存页面.有时,ISP运行代理服务器以减少网络外的带宽.您能否为要缓存的页面提供HTTP标头(Firebug可以为您提供这些标头).我特别感兴趣的标题包括Cache-Control,Expires,Last-Modified和ETag.
  2. 你可以从settings.py文件发布你的MIDDLEWARE_CLASSES.您可能拥有一个为您执行缓存的中间件.
  3. 您可以为以下项目"加载缓存","django.core.cache"和"cache_page"grep您的代码.A*grep -R"搜索"**将起作用.
  4. settings.py(或它导入的任何内容,如"来自localsettings import*")是否包含CACHE_BACKEND?
  5. 重启apache会发生什么?(例如sudo服务apache重启).如果重新启动清除问题,那么它可能是apache正在进行缓存(这可能也会清除一个locmen Django缓存后端)