У меня была такая же проблема сегодня, и я не нашел ни одного примера в интернете, поэтому немного поиграл.
Это мой 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
Я только что придумал это и еще не использовал его в производстве - так что он может работать не во всех случаях.