Chciałbym wykonać następujące czynności:
raise HttpResponseForbidden()
Ale pojawia się błąd:
exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden
Jak mam to zrobić?
Zwróć go z widoku, tak jak każdą inną odpowiedź.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
Http404
ale jej nie maHttp403
? Skąd ta niekonsekwencja?raise PermissionDenied
ma tę zaletę, że pozwala pokazać niestandardowy widok 403jeśli chcesz zgłosić wyjątek, możesz użyć:
Jest to udokumentowane tutaj:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
W przeciwieństwie do przywracania
HttpResponseForbidden
, podnoszeniePermissionDenied
powoduje renderowanie błędu przy użyciu403.html
szablonu lub można użyć oprogramowania pośredniczącego, aby wyświetlić niestandardowy widok „Zabroniony”.źródło
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.
źródło
Spróbuj w ten sposób, wysyłając wiadomość z błędem
źródło