Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

10.3 Уровни кэша в Django
7 из 16 шагов пройдено
0 из 27 баллов  получено

Кэширование представлений

Кэширование вывода отдельных представлений — это подход ещё более высокого уровня, чем кэширование фрагментов шаблона.

С помощью декоратора cache_page, из django.views.decorators.cache, можно кешировать результат вывода отдельных представлений. Декоратору требуется задать обязательный аргумент timeout в секундах, например:

from django.views.decorators.cache import cache_page


@cache_page(600)
def my_view(request):
    ...

Теперь весь контент, возвращаемый представлением my_view(), будет кэширован на 10ть минут.


Если несколько URL-адресов указывают на одно и то же представление, каждый URL-адрес будет кэшироваться отдельно.
Продолжая пример my_view, если ваш URLconf выглядит следующим образом:

urlpatterns = [
    path('id/<int:code>/', my_view),
]

То тогда запросы к /id/1/ и /id/2/ будут кэшироваться отдельно, как и следовало ожидать.
Как только будет запрошен определенный URL-адрес (например, /id/2/), и последующие запросы к этому URL-адресу будут использовать уже использовать кэш.

В предыдущих примерах, для представлений жёстко задаётся кэширование, поскольку декоратор cache_page изменяет само представление my_view(). Этот подход связывает ваше представление с системой кэширования, которая не идеальна по нескольким причинам. Например, вы можете захотеть повторно использовать функции представления на другом сайте без кэша или распространить представления среди людей, которые захотят использовать их без кэширования.

Решением этих проблем является указание кэша для каждого представления в URLconf, а не перед самими функциями представлениями. Для этого вы можете обернуть функцию представление в cache_page, когда вы ссылаетесь на неё в URLconf, например:

from django.views.decorators.cache import cache_page


urlpatterns = [
    path('id/<int:code>/', cache_page(600)(my_view)),
]

Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.