0

我想知道是否有办法允许用户使用Flask-Cache控制给定视图的缓存属性。

例如,除非用户单击链接,否则我希望无限期地缓存视图reload,在这种情况下,视图将被重新生成。我注意到@cached 装饰器有一个unless可用的kwarg,但我不确定如何使用它。

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

4

1 回答 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()dance 会让你的缓存键重新生成更加健壮。

于 2014-08-14T16:37:23.403 回答