首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flask-cache还记录URL查询字符串参数

flask-cache还记录URL查询字符串参数
EN

Stack Overflow用户
提问于 2012-02-23 20:59:20
回答 5查看 14.2K关注 0票数 30

flask-cache扩展有一个@cache.memoize装饰器来缓存一个视图,包括视图的*args**kwargs。然而,我的一些视图也接受URL查询字符串,例如/foo/image?width=640。装饰器将make_cache_key方法添加到装饰性视图函数中,该方法可用于自定义缓存键

但是,我不知道如何在正常的请求上下文之外获取request.args

你有什么办法让@cache.memoize也能处理URL查询字符串吗?

EN

回答 5

Stack Overflow用户

发布于 2017-11-08 22:06:05

您可以使用flask-caching

Flask-Cache扩展的

延续

你可以用它来做类似这样的事情:

代码语言:javascript
复制
@app.route("/")
@cache.cached(timeout=10, query_string=True)
def index():
    return render_template('index.html')

来自source code的文档:

代码语言:javascript
复制
:param query_string: Default False. When True, the cache key
                     used will be the result of hashing the
                     ordered query string parameters. This
                     avoids creating different caches for
                     the same query just because the parameters
                     were passed in a different order. See
                     _make_cache_key_query_string() for more
                     details.
票数 39
EN

Stack Overflow用户

发布于 2013-01-11 01:49:14

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

这是我的make_cache_key:

代码语言:javascript
复制
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和散列参数。我还需要将用户语言添加到键中。

缓存视图:

代码语言:javascript
复制
@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的可调用函数。因此,我们可以这样做:

代码语言:javascript
复制
@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

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

票数 37
EN

Stack Overflow用户

发布于 2013-08-27 01:20:09

从0.3.4版本开始,key_prefix可以是一个可调用的:

版本0.3.4中的新特性:可以选择是一个不带参数但返回一个将用作cache_key的字符串的callable。

这是文档:Flask-Cache

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9413566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档