Antworten:
Geben Sie es wie jede andere Antwort aus der Ansicht zurück.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDeniedhat den Vorteil, dass Sie Ihre benutzerdefinierte 403-Ansicht
Wenn Sie eine Ausnahme auslösen möchten, können Sie Folgendes verwenden:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
Es ist hier dokumentiert:
https://docs.djangoproject.com/de/stable/ref/views/#the-403-http-forbidden-view
Im Gegensatz zum erneuten Auslösen HttpResponseForbiddenwird beim Auslösen PermissionDeniedder Fehler mithilfe der 403.htmlVorlage gerendert , oder Sie können Middleware verwenden, um eine benutzerdefinierte "Verbotene" Ansicht anzuzeigen.
throw PermissionDeniednicht als Funktionsaufruf, ohne das ()am Ende.
Sie können optional eine benutzerdefinierte Vorlage mit dem Namen "403.html" angeben , um das Rendern von 403 HTTP-Fehlern zu steuern.
Wie von @ dave-halter korrekt ausgeführt, kann die 403-Vorlage nur verwendet werden, wenn Sie PermissionDenied auslösen
Unten finden Sie eine Beispielansicht zum Testen der benutzerdefinierten Vorlagen "403.html", "404.html" und "500.html". Bitte stellen Sie sicher, dass DEBUG = False in den Projekteinstellungen festgelegt ist. Andernfalls zeigt das Framework stattdessen einen Traceback für 404 und 500 an.
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)
Versuchen Sie es auf diese Weise und senden Sie eine Nachricht mit Fehler
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Http404aber nichtHttp403? Warum die Inkonsistenz?