Відповіді:
Поверніть його з виду, як і будь-який інший відповідь.
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 = Неправильно в налаштуваннях проекту, або на рамці буде показано зворотний простір замість 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
? Чому непослідовність?