【问题标题】:Python Flask force reload cached JS filesPython Flask 强制重新加载缓存的 JS 文件
【发布时间】:2017-05-12 08:49:13
【问题描述】:

我正在使用以下代码在我的烧瓶应用程序上缓存我的静态文件,该应用程序托管在 heroku 上:

# cache control
@app.after_request
def add_header(response):
    # rule so it will only affect static files
    rule = request.path
    if "static" in rule:
        response.cache_control.max_age = 1000000
        return response
    else:
        return response

效果很好。

但现在我做了一些更改,我需要网站加载新文件。 如果我在已经打开它的常规浏览器中打开该站点,它会加载旧文件(因为它们已被缓存)。

在隐身模式或按 ctrl+f5 = 加载新文件。问题是普通用户不会按 ctrl+f5 或使用隐身模式。

【问题讨论】:

  • 常见的方法是在你正在加载的资源中添加一个伪参数(例如时间戳或版本)。相关的 SO 问题:stackoverflow.com/questions/11467873 这也是 SO 用来确保您加载最新的 JS/CSS 文件的方法(只需查看此页面的源代码)。
  • 感谢您的提示!

标签: python caching heroku flask


【解决方案1】:

正如@mpf82 建议的那样,您可以简单地将版本或其他内容作为查询字符串参数添加到要重新加载的文件中。

如果文件名更改,浏览器将不再缓存旧文件。

url_for 中未知的flask 变量将作为查询字符串处理,因此您只需选择一个未知变量f.e. version并在此处添加版本号 f.e. 12052017:

<script type=text/javascript src="{{ url_for('static', filename='js/main.js', version='12052017') }}"></script>

就是这样,结果:

&lt;script type=text/javascript src="/static/js/main.js?version=12052017"&gt;&lt;/script&gt;

【讨论】:

  • 这太棒了,而且如此简单!如果您希望它至少每天刷新一次,您也可以传递一个值为 datetime.date.today() 的变量,但这可能不是超级高效。
猜你喜欢
  • 2011-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 2021-04-14
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多