Python 控制烧瓶缓存';从一个角度看
我想知道是否有一种方法允许用户使用控制给定视图的缓存属性 例如,我希望视图被无限期缓存,除非用户单击Python 控制烧瓶缓存';从一个角度看,python,caching,flask,flask-cache,Python,Caching,Flask,Flask Cache,我想知道是否有一种方法允许用户使用控制给定视图的缓存属性 例如,我希望视图被无限期缓存,除非用户单击reload链接,在这种情况下,视图将被重新生成。我注意到装饰师可以使用,除非kwarg,但我不确定如何使用它 似乎我应该能够为('this\u view',dont\u cache=True)在this\u view的Jinja模板上的某个地方添加一个url;给定查看功能和路线的完整路径,请使用: from flask import current_app with current_app.t
reload
链接,在这种情况下,视图将被重新生成。我注意到装饰师可以使用,除非kwarg,但我不确定如何使用它
似乎我应该能够为('this\u view',dont\u cache=True)
在this\u view
的Jinja模板上的某个地方添加一个url;给定查看功能和路线的完整路径,请使用:
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
是视图的路径;您可以使用('this_view')的path=url_
来生成它,而view
是您在上使用的(修饰的)函数对象<代码>缓存
是烧瓶缓存对象
清除缓存后,将重新生成对该视图的新请求
如果从未设置自定义的键\u前缀
(可调用或字符串),则给定视图的默认缓存键基于请求.path
值;你也可以用这个:
cache_key = 'view/{}'.format(url_for('this_view'))
cache.delete(cache_key)
但是上面的当前应用程序.test\u request\u context
/视图.make\u cache\u key()
舞蹈将使您的缓存密钥重新生成更加健壮。很抱歉,但我不太明白如何使用您的建议。这可能很明显,但我对烧瓶还不熟悉。@alex:你可以在另一个视图中使用它;您可以调用它来清除缓存视图的缓存。好的,我明白了。那么你的解决方案是在中间使用“重定向”视图?view1上的链接->重定向视图(删除缓存)->新建view1@alex:并非如此,如果view1完全缓存了所有可能的路由参数,则这意味着它不会发出重定向,除非这是缓存响应。如何将用户引导到“缓存清除”视图仍然是需要解决的问题。@alex:我从最近的一个项目中选择了这个答案中的代码,在该项目中,如果后端数据发生更改,后端API允许用户清除缓存;通过这种方式,普通视图都被大量缓存并具有很高的性能,直到后端API的所有者发送一个信号,表明视图所基于的数据已经更改。