flask-cache还可以记住URL查询字符串参数
flask-cache扩展具有@cache.memoize
装饰器,用于缓存包含视图的*arg
s和的视图**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