Параметр forced_update
Параметр forced_update применяется в декораторах cached и memoize модуля кеширования Flask. Он принимает callable-объект, который вызывается при каждом запросе и получает те же аргументы, что и декорируемая функция. Если callable возвращает True, значение в кеше игнорируется и функция выполняется заново, а результат перезаписывается. Если возвращается False, используется закешированное значение.
Синтаксис
@cache.cached(timeout, forced_update=callable)
@cache.memoize(timeout, forced_update=callable)
Пример
Давайте создадим простое приложение с кешем, в котором значение принудительно обновляется, если в запросе присутствует параметр refresh:
from flask import Flask, request
from flask_caching import Cache
app = Flask(__name__)
app.config['CACHE_TYPE'] = 'simple'
cache = Cache(app)
def should_refresh():
return request.args.get('refresh') == '1'
@app.route('/')
@cache.cached(timeout=60, forced_update=should_refresh)
def index():
return 'hello'
При первом обращении к адресу / результат "hello" попадёт в кеш. Если затем открыть /?refresh=1, значение будет вычислено заново и снова сохранено.
Пример
Давайте применим forced_update к декоратору memoize, чтобы обновлять результат функции с аргументами:
from flask import Flask, request
from flask_caching import Cache
app = Flask(__name__)
app.config['CACHE_TYPE'] = 'simple'
cache = Cache(app)
def should_refresh():
return request.args.get('refresh') == '1'
@app.route('/user/<name>')
@cache.memoize(timeout=120, forced_update=should_refresh)
def user(name):
return 'user ' + name
Результат выполнения кода для адреса /user/abcde:
"user abcde"
Если запросить /user/abcde?refresh=1, значение для ключа abcde будет пересчитано и перезаписано в кеше.