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

HttpResponseNotModified

Класс HttpResponseNotModified наследуется от HttpResponse и предназначен для возврата ответа с кодом состояния 304. Он используется в механизмах кэширования, когда сервер проверяет наличие изменений в ресурсе. Если ресурс не изменился, сервер может вернуть этот ответ без тела, сообщая клиенту использовать закэшированную версию. Класс автоматически устанавливает статус-код 304 и удаляет любое содержимое, так как ответ с этим кодом не должен содержать тело.

Синтаксис

from django.http import HttpResponseNotModified response = HttpResponseNotModified()

Параметры

Класс не принимает обязательных параметров, так как ответ 304 всегда должен быть пустым. Однако можно передать именованные аргументы для заголовков:

  • headers - словарь с дополнительными HTTP-заголовками
  • status - код состояния (будет переопределен на 304)
  • reason - текстовое описание статуса
  • charset - кодировка (не используется для пустого тела)

Пример . С проверкой заголовков

Давайте создадим представление, которое проверяет наличие заголовка 'If-None-Match' с ETag и возвращает 304, если ресурс не изменился:

from django.http import HttpResponseNotModified, HttpResponse from django.views.decorators.http import require_GET @require_GET def article_view(request, article_id): article = Article.objects.get(id=article_id) current_etag = f"etag-{article.updated_at.timestamp()}" if request.headers.get('If-None-Match') == current_etag: return HttpResponseNotModified() response = HttpResponse(f"<h1>{article.title}</h1>") response['ETag'] = current_etag return response

Пример . С дополнительными заголовками

В некоторых случаях может потребоваться добавить заголовки к ответу 304, например, для управления кэшированием:

from django.http import HttpResponseNotModified def check_resource(request): if request.headers.get('If-Modified-Since') == 'Wed, 21 Oct 2026 07:28:00 GMT': response = HttpResponseNotModified() response['Cache-Control'] = 'max-age=3600' response['Vary'] = 'User-Agent' return response return HttpResponse("Resource content")

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

Рассмотрим использование HttpResponseNotModified внутри метода класса DetailView:

from django.views.generic import DetailView from django.http import HttpResponseNotModified from myapp.models import Article class ArticleDetailView(DetailView): model = Article template_name = 'article.html' context_object_name = 'article' def get(self, request, *args, **kwargs): self.object = self.get_object() article_etag = f"etag-{self.object.updated_at.timestamp()}" if request.headers.get('If-None-Match') == article_etag: return HttpResponseNotModified() response = super().get(request, *args, **kwargs) response['ETag'] = article_etag return response

Результат при повторном запросе с тем же ETag:

"<HttpResponseNotModified status_code=304>"

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

  • класс HttpResponse,
    который используется для отправки HTTP-ответов с содержимым
  • класс JsonResponse,
    который возвращает JSON-данные в HTTP-ответе
  • класс HttpResponseRedirect,
    который отправляет клиенту редирект
  • декоратор condition,
    который автоматически обрабатывает условные запросы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить