Odpowiedzi:
Zwróć go z widoku, tak jak każdą inną odpowiedź.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDenied
ma tę zaletę, że pozwala pokazać niestandardowy widok 403
jeśli chcesz zgłosić wyjątek, możesz użyć:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
Jest to udokumentowane tutaj:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
W przeciwieństwie do przywracania HttpResponseForbidden
, podnoszenie PermissionDenied
powoduje renderowanie błędu przy użyciu 403.html
szablonu lub można użyć oprogramowania pośredniczącego, aby wyświetlić niestandardowy widok „Zabroniony”.
throw PermissionDenied
nie jako wywołanie funkcji, bez ()
na końcu.
Opcjonalnie możesz podać niestandardowy szablon o nazwie „403.html”, aby kontrolować renderowanie błędów 403 HTTP.
Jak poprawnie wskazał @ dave-halter, szablon 403 może być użyty tylko wtedy, gdy podniesiesz PermissionDenied
Poniżej znajduje się przykładowy widok używany do testowania niestandardowych szablonów „403.html”, „404.html” i „500.html”; upewnij się, że ustawiłeś DEBUG = False w ustawieniach projektu lub framework pokaże zamiast tego śledzenie dla 404 i 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)
Spróbuj w ten sposób, wysyłając wiadomość z błędem
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Http404
ale jej nie maHttp403
? Skąd ta niekonsekwencja?