Подтвердить что ты не робот

Как повысить ошибку 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? Я хочу быть в состоянии поднять это исключение где угодно, а не только в моих взглядах. Спасибо!

4b9b3361

Ответ 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, в обработчик вида.