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.")
Смотрите также
-
класс
HttpResponseNotFound,
который возвращает статус 404 -
класс
HttpResponseForbidden,
который возвращает статус 403 -
класс
HttpResponseRedirect,
который выполняет перенаправление -
класс
HttpResponseBadRequest,
который возвращает статус 400