Ответы:
Верните его из представления, как и любой другой ответ.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDenied
имеет то преимущество, что позволяет вам показывать свой собственный вид 403
если вы хотите вызвать исключение, вы можете использовать:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
Это задокументировано здесь:
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 фреймворк будет отображать трассировку.
from django.http import HttpResponse
from django.http import Http404
from django.core.exceptions import PermissionDenied
def index(request):
html = """
<!DOCTYPE html>
<html lang="en">
<body>
<ul>
<li><a href="/">home</a></li>
<li><a href="?action=raise403">Raise Error 403</a></li>
<li><a href="?action=raise404">Raise Error 404</a></li>
<li><a href="?action=raise500">Raise Error 500</a></li>
</ul>
</body>
</html>
"""
action = request.GET.get('action', '')
if action == 'raise403':
raise PermissionDenied
elif action == 'raise404':
raise Http404
elif action == 'raise500':
raise Exception('Server error')
return HttpResponse(html)
Попробуйте, отправив сообщение с ошибкой
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Http404
но нетHttp403
? Почему несоответствие?