Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 控制烧瓶缓存';从一个角度看_Python_Caching_Flask_Flask Cache - Fatal编程技术网

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的所有者发送一个信号,表明视图所基于的数据已经更改。