РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
508 of 643 menu

Параметр unless

Параметр unless применяется в декораторах кэширования Flask-Caching, таких как cached и memoize. Он принимает callable-объект (функцию), которая вызывается при каждом запросе. Если эта функция возвращает True, то результат текущего вызова не будет сохраняться в кэш. Если возвращается False, кэширование работает как обычно. Параметр удобно использовать, когда нужно обходить кэш при определённых условиях, например, для авторизованных пользователей.

Синтаксис

@cache.cached(timeout, unless=condition_func)

Пример

Давайте создадим простое приложение с кэшированием и отключим кэш, если передан параметр nocache:

from flask import Flask, request from flask_caching import Cache app = Flask(__name__) app.config['CACHE_TYPE'] = 'simple' cache = Cache(app) def skip_cache(): return request.args.get('nocache') == '1' @app.route('/') @cache.cached(timeout=60, unless=skip_cache) def index(): return 'hello'

При обращении к адресу / результат сохраняется в кэш. При обращении к /?nocache=1 функция skip_cache вернёт True, и кэш использоваться не будет.

Пример

Давайте отключим кэширование для авторизованных пользователей:

from flask import Flask, session from flask_caching import Cache app = Flask(__name__) app.secret_key = 'secret' app.config['CACHE_TYPE'] = 'simple' cache = Cache(app) def is_logged_in(): return 'user' in session @app.route('/') @cache.cached(timeout=120, unless=is_logged_in) def index(): return 'hello'

Для гостей страница кэшируется, а для авторизованных пользователей результат всегда вычисляется заново.

Пример

Давайте применим unless вместе с декоратором memoize:

from flask import Flask, request from flask_caching import Cache app = Flask(__name__) app.config['CACHE_TYPE'] = 'simple' cache = Cache(app) def bypass(): return request.args.get('fresh') == '1' @cache.memoize(timeout=300, unless=bypass) def get_data(param): return 'abcde' + param @app.route('/data/<param>') def data(param): return get_data(param)

Функция get_data кэшируется по аргументу param, но при наличии параметра fresh=1 в запросе результат не будет сохранён в кэш.

Смотрите также

  • декоратор cached,
    который кэширует результат представления
  • декоратор memoize,
    который кэширует результат функции по её аргументам
  • параметр timeout,
    который задаёт время жизни кэша
  • параметр forced_update,
    который принудительно обновляет кэш
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить