python - 如何禁用 Django/mod_WSGI 页面缓存

标签 python django apache caching mod-wsgi

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

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

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

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

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

[编辑] 我对正在发生的事情有更详尽的描述:对于对服务器发出的前 7 个(左右)请求,页面由脚本呈现并返回,尽管这 7 个页面中的每一个似乎都是稍后显示时缓存。在第 8 次请求时,服务器提供第一页。在第 9 个请求时,它提供第二个页面,以此类推。这一直持续到我重新启动 apache 时,进程再次开始。

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

[编辑] 鉴于之前的编辑,我回头查看了相关的 views.py 文件,发现在模块中全局设置了倒计时开始变量,在 View 函数之外。在 View 函数中移动该设置解决了这个问题。所以这毕竟不是缓存问题。感谢大家对此的帮助。

最佳答案

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

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

关于python - 如何禁用 Django/mod_WSGI 页面缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1633684/

相关文章:

apache - .htaccess 使用 UTF 8 字符重定向 URL

python - ModuleNotFoundError : No module named 'Crypto'

Python 列表与字符串连接到新列表中

python - 如何将文件上传到 Django 中的特定文件夹?

django - 在 Django 中添加查询集中的所有值

python - 如何在 Django REST Serializer 中最小化数据库查询

java - 如何调试外部 JAR 文件

Apache - Tomcat ProxyPass VirtualHost - 上下文路径

python - SQLAlchemy ResultProxy.rowcount 不应为零

python - 强制Python释放对象以释放内存