从视图控制flask-cache缓存

0 投票
1 回答
793 浏览
提问于 2025-04-18 17:18

我在想有没有办法让用户控制某个视图的缓存属性,使用的是Flask-Cache

举个例子,我希望某个视图可以无限期缓存,除非用户点击一个reload链接,这样视图就会重新生成。我注意到在@cached装饰器中有一个unless的参数,但我不太确定该怎么用。

看起来我应该可以在this_view的Jinja模板中某个地方添加url_for('this_view', dont_cache=True)

1 个回答

2

你可以清除缓存;给定一个视图函数和路由的完整路径,可以使用:

from flask import current_app

with current_app.test_request_context(path=path):
    # the cache key can use `request` so we need to provide the correct
    # context here
    cache_key = view.make_cache_key()

cache.delete(cache_key)

这里的path是指视图的路径;你可以用path = url_for('this_view')来生成它,而view是你在上面用@cache.cached()cache是Flask-Cache对象。

一旦缓存被清除,对那个视图的新请求会重新生成缓存。

如果你从来没有设置过自定义的key_prefix(可以是可调用的或字符串),那么给定视图的默认缓存键是基于request.path的值;你也可以这样使用:

cache_key = 'view/{}'.format(url_for('this_view'))
cache.delete(cache_key)

不过上面的current_app.test_request_context / view.make_cache_key()的组合会让你的缓存键重新生成更稳健。

撰写回答