flask-cache扩展具有@cache.memoize装饰器,用于缓存包含视图的*args和的视图**kwargs。但是,我的某些视图也采用了URL查询字符串,例如/foo/image?width=640。装饰器make_cache_key在装饰后的视图函数中添加一种方法,可用于自定义缓存键
@cache.memoize
*arg
**kwargs
/foo/image?width=640
make_cache_key
但是我不知道如何获得request.args正常的请求上下文。
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
我只是想出了这一点,还没有在生产中使用它-因此它可能无法在所有情况下都起作用。