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

Декоратор cache_page

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

Синтаксис

from django.views.decorators.cache import cache_page @cache_page(timeout, key_prefix=None) def view_function(request): # код представления return render(request, 'template.html', context)

Пример . Для функции представления

Давайте закешируем главную страницу на 60 секунд:

from django.shortcuts import render from django.views.decorators.cache import cache_page from myapp.models import Article @cache_page(60) def index(request): articles = Article.objects.all() return render(request, 'index.html', {'articles': articles})

После первого запроса результат будет сохранен в кеше на 60 секунд. В течение этого времени все последующие запросы к странице будут получать закешированную версию без выполнения запросов к базе данных.

Пример . Для классов представления

Для классовых представлений декоратор применяется через метод as_view:

from django.views.generic import ListView from django.views.decorators.cache import cache_page from django.utils.decorators import method_decorator from myapp.models import Article class ArticleListView(ListView): model = Article template_name = 'articles/list.html' context_object_name = 'articles' @method_decorator(cache_page(120)) def dispatch(self, request, *args, **kwargs): return super().dispatch(request, *args, **kwargs)

Пример . С указанием префикса

Аргумент key_prefix позволяет задать уникальный префикс для ключа кеша, что полезно при использовании нескольких кешей или версий страницы:

from django.shortcuts import render from django.views.decorators.cache import cache_page from myapp.models import Category @cache_page(300, key_prefix='category_list_v1') def category_list(request): categories = Category.objects.filter(is_active=True) return render(request, 'categories.html', {'categories': categories})

Пример . С динамическим временем кеширования

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

from django.shortcuts import render from django.views.decorators.cache import cache_page from django.conf import settings def dynamic_cache_page(timeout): return cache_page(timeout, key_prefix='dynamic_page') @dynamic_cache_page(settings.CACHE_TIMEOUT) def dynamic_view(request): # код представления return render(request, 'dynamic.html')

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

  • декоратор cache_control,
    который управляет заголовками HTTP-кеширования
  • декоратор never_cache,
    который запрещает кеширование страницы
  • тег шаблона cache,
    который кеширует отдельные фрагменты шаблона
  • метод set,
    который сохраняет данные в кеш вручную
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить