Как поднять ошибку 410 в Django - PullRequest
10 голосов
/ 17 ноября 2010

Я хотел бы вернуть 410 ошибок для некоторых моих страниц Django вместо возврата 404.По сути, вместо вызова raise Http404('some error message') я хотел бы вместо этого вызвать raise Http410('some error message') shortcut.

Я запутался, потому что в django.http функция Http404 просто:

class Http404(Exception):
    pass

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

class Http410(Exception):
    pass

Однако выполнение этого возвращает исключение, но отображает страницу с ошибкой 500.Как воссоздать магию исключения Http404?Должен заметить, мне нужно поднять исключение из моих моделей (не представлений), чтобы я не мог просто вернуть HttpResponseGone.

Заранее спасибо!

Обновление: я полностью осведомлен оHttpResponseGone и упомянул это в моем оригинальном вопросе.Я уже знаю, как вернуть это в моих взглядах.Мой вопрос: как вызвать исключение Http 410 аналогично тому, как вы вызываете исключение Http 404?Я хочу иметь возможность поднять это исключение в любом месте, а не только в моих взглядах.Спасибо!

Ответы [ 3 ]

22 голосов
/ 17 ноября 2010
from django.http import HttpResponse
return HttpResponse(status=410)
16 голосов
/ 18 ноября 2010

Django не включает механизм для этого, потому что ушел должен быть нормальный рабочий процесс, а не состояние ошибки, но если вы не хотите рассматривать его как ответ возврата, и как исключение, просто внедрите middleware .

class MyGoneMiddleware(object):
    def process_exception(self, request, exception):
        if isinstance(exception, Http410):
            return HttpResponseGone("Gone!")
        return None
11 голосов
/ 17 ноября 2010

Возвращает HttpResponseGone, подкласс HttpResponse, в ваш обработчик представления.

...