Контролировать флеш-кешинг из вида

Мне интересно, есть ли способ, позволяющий пользователю контролировать свойства кэширования данного представления с помощью Flask-Cache.

Например, я хотел бы, чтобы представление кэшировалось бесконечно, если пользователь не щелкнет reload ссылка, в этом случае представление будет перегенерировано. Я заметил, что есть unless kwarg доступен для @cached декоратора, но я не уверен, как его использовать.

Кажется, я должен быть в состоянии добавить url_for('this_view', dont_cache=True) где-то на this_viewДжинджа шаблон.

1 ответ

Решение

Вы можете очистить кеш; учитывая функцию просмотра и полный путь к маршруту, используйте:

from flask import current_app

with current_app.test_request_context(path=path):
    # the cache key can use `request` so we need to provide the correct
    # context here
    cache_key = view.make_cache_key()

cache.delete(cache_key)

Вот path путь к виду; вы могли бы использовать path = url_for('this_view') генерировать это, и view является (украшенным) функциональным объектом, который вы использовали @cache.cached() на. cache является объектом Flask-Cache.

После очистки кеша новый запрос к этому представлению сгенерирует его заново.

Если вы никогда не устанавливаете кастом key_prefix (вызываемый или строковый), тогда ключ кеша по умолчанию для данного представления основан на request.path значение; Вы также можете использовать это:

cache_key = 'view/{}'.format(url_for('this_view'))
cache.delete(cache_key)

но current_app.test_request_context / view.make_cache_key() танец выше сделает повторную генерацию кеша более надежной.

Другие вопросы по тегам