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

HttpResponseGone

Класс HttpResponseGone наследуется от HttpResponse и предназначен для отправки клиенту HTTP-ответа со статусов 410. Этот статус указывает, что ресурс больше недоступен по указанному URL-адресу и это состояние является постоянным. В отличие от статуса 404, который говорит о временном отсутствии страницы, статус 410 информирует о том, что ресурс был удален намеренно и без возможности восстановления. Класс принимает те же параметры, что и родительский класс, включая содержимое ответа, заголовки и другие атрибуты.

Синтаксис

from django.http import HttpResponseGone response = HttpResponseGone(content=None, content_type=None, status=410, reason=None, charset=None, headers=None)

Пример . С простым сообщением

Создадим простой ответ с сообщением о том, что ресурс удален:

from django.http import HttpResponseGone from django.views import View class OldArticleView(View): def get(self, request, article_id): return HttpResponseGone("This article has been permanently removed.")

Пример . Использование в функции-представлении

В функции-представлении можно использовать HttpResponseGone для возврата статуса 410, если ресурс был окончательно удален из базы данных:

from django.http import HttpResponseGone, HttpResponseNotFound from django.shortcuts import get_object_or_404 from myapp.models import Article def article_detail(request, article_id): try: article = Article.objects.get(id=article_id) if article.is_deleted: return HttpResponseGone("The article has been permanently deleted.") return render(request, 'article.html', {'article': article}) except Article.DoesNotExist: return HttpResponseNotFound("Article not found.")

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

Можно добавить пользовательские заголовки в ответ, чтобы передать дополнительную информацию клиенту:

from django.http import HttpResponseGone from django.views.decorators.http import require_GET @require_GET def deleted_resource(request, resource_id): response = HttpResponseGone("Resource no longer exists.") response['X-Resource-ID'] = str(resource_id) response['X-Deleted-At'] = "2026-09-07" return response

Пример . С JSON-ответом

Для REST API удобно возвращать данные в формате JSON вместе со статусом 410:

import json from django.http import HttpResponseGone def api_deleted_resource(request, resource_id): data = { 'status': 'gone', 'message': 'Resource permanently deleted', 'resource_id': resource_id, 'deleted_at': '2026-09-07T10:30:00Z' } json_data = json.dumps(data) return HttpResponseGone(json_data, content_type='application/json')

Пример . С использованием класса View

В классовых представлениях можно переопределить метод get или использовать специальный метод для проверки доступности ресурса:

from django.http import HttpResponseGone from django.views import View from myapp.models import Article class LegacyContentView(View): def get(self, request, content_id): try: content = Article.objects.get(id=content_id) if content.status == 'deleted': return HttpResponseGone("This content has been permanently removed.") return render(request, 'content.html', {'content': content}) except Article.DoesNotExist: return HttpResponseGone("Content no longer exists.")

Пример . С проверкой срока давности

Иногда необходимо автоматически возвращать статус 410 для ресурсов, которые старше определенного периода:

from django.http import HttpResponseGone from django.utils import timezone from datetime import timedelta from myapp.models import Article def old_article_view(request, article_id): try: article = Article.objects.get(id=article_id) three_years_ago = timezone.now() - timedelta(days=3*365) if article.created_at < three_years_ago: return HttpResponseGone("This article is too old and has been removed.") return render(request, 'article.html', {'article': article}) except Article.DoesNotExist: return HttpResponseGone("Article not found.")

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

Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить