禁用Flask中的缓存

时间:2015-12-03 13:02:46

标签: python caching flask

我有一些缓存问题。我正在运行非常小的Web应用程序,它读取一帧,将其保存到磁盘,然后在浏览器窗口中显示。

我知道,它可能不是最好的解决方案,但每次我都保存这个相同名称的阅读框架,因此任何浏览器都会缓存它。

我尝试使用html元标记 - 没有成功:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

另外,我尝试过这个(烧瓶专用):

resp.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
resp.headers["Pragma"] = "no-cache"
resp.headers["Expires"] = "0"

这就是我尝试修改resp标题的方式:

r = make_response(render_template('video.html', video_info=video_info))

r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
r.headers["Pragma"] = "no-cache"
r.headers["Expires"] = "0"

Google Chrome和Safari仍然会进行缓存。

这可能是什么问题?

提前谢谢

4 个答案:

答案 0 :(得分:45)

行,

最后它适用于此:

@app.after_request
def add_header(r):
    """
    Add headers to both force latest IE rendering engine or Chrome Frame,
    and also to cache the rendered page for 10 minutes.
    """
    r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
    r.headers["Pragma"] = "no-cache"
    r.headers["Expires"] = "0"
    r.headers['Cache-Control'] = 'public, max-age=0'
    return r

如果添加此项,则在每个请求完成后调用此函数。请参阅here

我很高兴,如果有人能解释为什么这个标题覆盖在页面处理程序中不起作用?

谢谢。

答案 1 :(得分:2)

python文件中的app.config ['SEND_FILE_MAX_AGE_DEFAULT'] = 0

和 chrome浏览器的硬重载(命令+ shift + R)对我来说很有效,因为Chrome似乎可以缓存静态文件

答案 2 :(得分:1)

如果您始终遇到相同的问题,则Flask不会在JS和CSS文件中看到更新,这是因为默认情况下,Flask的最大寿命值为12小时。您可以将其设置为0,以解决以下问题:

app = Flask(__name__, static_url_path='/static') app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0

答案 3 :(得分:-1)

您可以使用Ctrl + F5绕过缓存