flask-cache还可以记住URL查询字符串参数

flask-cache扩展具有@cache.memoize装饰器,用于缓存包含视图的*args和的视图**kwargs。但是,我的某些视图也采用了URL查询字符串,例如/foo/image?width=640。装饰器make_cache_key在装饰后的视图函数中添加一种方法,可用于自定义缓存键

但是我不知道如何获得request.args正常的请求上下文。

有什么想法也可以@cache.memoize使用URL查询字符串吗?

回答:

31

我今天遇到了同样的问题,在互联网上找不到任何示例,所以我玩了一些。

这是我的make_cache_key:

def make_cache_key(*args, **kwargs):

path = request.path

args = str(hash(frozenset(request.args.items())))

lang = get_locale()

return (path + args + lang).encode('utf-8')

你可以使用request.url而不是path和哈希参数。我还需要将用户语言添加到键中。

缓存视图:

@app.route("/test")

@cache.cached(timeout=50)

def test():

a = request.args.get('a')

b = request.args.get('b')

return a + b

test.make_cache_key = make_cache_key

它有效,但我认为这很麻烦。原来,key_prefix可以是可调用的,可以生成整个cache_key。因此,我们可以这样做:

@app.route("/test2")

@cache.cached(timeout=50, key_prefix=make_cache_key)

def test2():

a = request.args.get('a')

b = request.args.get('b')

return a + b

我只是想出了这一点,还没有在生产中使用它-因此它可能无法在所有情况下都起作用。

以上是 flask-cache还可以记住URL查询字符串参数 的全部内容, 来源链接: utcz.com/qa/423783.html

回到顶部