Ich möchte Folgendes tun:
raise HttpResponseForbidden()
Aber ich bekomme den Fehler:
exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden
Wie soll ich das machen?
Geben Sie es wie jede andere Antwort aus der Ansicht zurück.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
Http404
aber nichtHttp403
? Warum die Inkonsistenz?raise PermissionDenied
hat den Vorteil, dass Sie Ihre benutzerdefinierte 403-AnsichtWenn Sie eine Ausnahme auslösen möchten, können Sie Folgendes verwenden:
Es ist hier dokumentiert:
https://docs.djangoproject.com/de/stable/ref/views/#the-403-http-forbidden-view
Im Gegensatz zum erneuten Auslösen
HttpResponseForbidden
wird beim AuslösenPermissionDenied
der Fehler mithilfe der403.html
Vorlage gerendert , oder Sie können Middleware verwenden, um eine benutzerdefinierte "Verbotene" Ansicht anzuzeigen.quelle
throw PermissionDenied
nicht 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.
quelle
Versuchen Sie es auf diese Weise und senden Sie eine Nachricht mit Fehler
quelle