从视图控制flask-cache缓存
我在想有没有办法让用户控制某个视图的缓存属性,使用的是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()
的组合会让你的缓存键重新生成更稳健。