Как повысить ошибку 410 в Django
Я хотел бы вернуть 410 ошибок для некоторых из моих страниц Django вместо возврата 404. В принципе, вместо вызова raise Http404('some error message')
я хотел бы вместо этого вызвать raise Http410('some error message')
ярлык.
Я запутался, потому что в django.http функция Http404 проста:
class Http404(Exception):
pass
Итак, если я делаю то же самое и создаю свою функцию Http410, я бы предположил, что она будет выглядеть так:
class Http410(Exception):
pass
Однако выполнение этого возвращает исключение, но обслуживает 500 страниц ошибок. Как воссоздать магию исключения Http404? Я должен отметить, что мне нужно поднять исключение из моих моделей (а не представлений), поэтому я не могу просто вернуть HttpResponseGone.
Спасибо заранее!
Обновление:
Я полностью осведомлен о HttpResponseGone и упомянул об этом в моем первоначальном вопросе. Я уже знаю, как вернуть это в моих взглядах. Мой вопрос: как вы поднимаете исключение Http 410 аналогично тому, как вы поднимаете исключение Http 404? Я хочу быть в состоянии поднять это исключение где угодно, а не только в моих взглядах. Спасибо!
Ответы
Ответ 1
Django не включает механизм для этого, потому что ушел должен быть нормальный рабочий процесс, а не условие ошибки, но если вы хотите не рассматривать его как ответ возврата, а как исключение, просто выполните middleware.
class MyGoneMiddleware(object):
def process_exception(self, request, exception):
if isinstance(exception, Http410):
return HttpResponseGone("Gone!")
return None
Ответ 2
from django.http import HttpResponse
return HttpResponse(status=410)
Ответ 3
Верните a HttpResponseGone
, подкласс HttpResponse
, в обработчик вида.