Я хотел бы сделать следующее:
raise HttpResponseForbidden()
Но я получаю ошибку:
exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden
Как мне это сделать?
Верните его из представления, как и любой другой ответ.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
Http404
но нетHttp403
? Почему несоответствие?raise PermissionDenied
имеет то преимущество, что позволяет вам показывать свой собственный вид 403если вы хотите вызвать исключение, вы можете использовать:
Это задокументировано здесь:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
В отличие от повторного создания
HttpResponseForbidden
, повышениеPermissionDenied
вызывает рендеринг ошибки с использованием403.html
шаблона, или вы можете использовать промежуточное ПО для отображения пользовательского «Запрещенного» представления.источник
throw PermissionDenied
не как вызов функции, без()
в конце.При желании вы можете указать пользовательский шаблон с именем «403.html» для управления отображением ошибок 403 HTTP.
Как правильно указал @ dave-halter, шаблон 403 можно использовать только если вы подняли PermissionDenied
Ниже приведен пример представления для тестирования пользовательских шаблонов «403.html», «404.html» и «500.html»; пожалуйста, убедитесь, что в настройках проекта установлено DEBUG = False, иначе вместо 404 и 500 фреймворк будет отображать трассировку.
источник
Попробуйте, отправив сообщение с ошибкой
источник