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

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

但是我不知道如何在普通请求上下文之外获取request.args

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

参考方案

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

这是我的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 Cors无法运作 - python

我正在尝试在Flask应用程序中启用CORS,但无论我把来源如何,似乎总是可以从浏览器访问URL。我不知道我做错了什么。这是我的代码from flask import Flask, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r'/*&…

flask:异常后停止服务器 - python

我想在发生未处理的异常时立即停止我的Flask服务器。这是一个例子:from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): 1/0 # argh, exception return 'Hello World!' i…

python flask如何从URL获取路由ID - python

我正在用烧瓶。我有一个网址,例如:http://example.com/page/page_id我想知道如何从路线中的网址获取page_id部分。我希望我可以设计出一些方法,例如:@route('/page/page_id') def page(page_id): pageid = page_id 参考方案 这非常简单-在尖括号之间传递p…

Flask-RESTful-返回自定义响应格式 - python

我已经按照以下Flask-RESTful文档定义了自定义响应格式。app = Flask(__name__) api = restful.Api(app) @api.representation('application/octet-stream') def binary(data, code, headers=None): resp =…

'未找到应用程序。在视图函数内部工作或推送应用程序上下文。” - python

我试图将我的Flask-SQLAlchemy模型分成单独的文件。当我尝试运行db.create_all()时,我得到No application found. Either work inside a view function or push an application context.shared/db.py:from flask_sqlalchemy…