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

Декоратор cache_control

Декоратор cache_control применяется к функциям представления и позволяет установить заголовки Cache-Control для HTTP-ответа. Это дает возможность управлять кэшированием на стороне клиента и промежуточных прокси-серверов. Декоратор принимает именованные аргументы, соответствующие директивам заголовка Cache-Control.

Синтаксис

from django.views.decorators.cache import cache_control @cache_control(directive1=value1, directive2=value2) def view_function(request): # код представления return render(request, 'template.html')

Основные директивы

Декоратор поддерживает следующие основные директивы:

# Максимальное время кэширования в секундах @cache_control(max_age=3600) # Запрет кэширования @cache_control(no_cache=True) # Запрет сохранения кэша на диске @cache_control(no_store=True) # Только для приватного кэша @cache_control(private=True) # Только для публичных кэшей @cache_control(public=True) # Обязательная проверка свежести @cache_control(must_revalidate=True) # Максимальная устаревшая версия @cache_control(max_stale=3600) # Минимальная свежесть @cache_control(min_fresh=60)

Пример . С max_age

Давайте ограничим время кэширования страницы одной минутой:

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

Результат выполнения кода:

"Cache-Control: max-age=60"

Пример . С комбинацией директив

Создадим представление, которое запрещает кэширование и требует проверки свежести:

from django.views.decorators.cache import cache_control from django.shortcuts import render from myapp.models import User @cache_control(no_cache=True, must_revalidate=True) def user_profile(request, user_id): user = User.objects.get(id=user_id) return render(request, 'profile.html', {'user': user})

Результат выполнения кода:

"Cache-Control: no-cache, must-revalidate"

Пример . С публичным кэшированием

Настроим публичное кэширование для статической страницы на 24 часа:

from django.views.decorators.cache import cache_control from django.shortcuts import render from datetime import datetime @cache_control(public=True, max_age=86400) def about_page(request): context = { 'current_year': datetime.now().year, } return render(request, 'about.html', context)

Результат выполнения кода:

"Cache-Control: public, max-age=86400"

Пример . С приватным кэшированием

Создадим страницу, которая должна кэшироваться только на клиенте:

from django.views.decorators.cache import cache_control from django.shortcuts import render from myapp.models import Category @cache_control(private=True, max_age=600) def user_dashboard(request): categories = Category.objects.all() return render(request, 'dashboard.html', {'categories': categories})

Результат выполнения кода:

"Cache-Control: private, max-age=600"

Пример . С запретом сохранения

Настроим страницу, которая не должна сохраняться в кэше:

from django.views.decorators.cache import cache_control from django.shortcuts import render from myapp.models import Article @cache_control(no_store=True, no_cache=True) def article_create(request): if request.method == 'POST': # Обработка создания статьи pass return render(request, 'article_form.html')

Результат выполнения кода:

"Cache-Control: no-cache, no-store"

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

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