J'aimerais faire ce qui suit:
raise HttpResponseForbidden()
Mais j'obtiens l'erreur:
exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden
Comment dois-je faire cela?
Renvoyez-le de la vue comme vous le feriez pour toute autre réponse.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
Http404
mais pasHttp403
? Pourquoi cette incohérence?raise PermissionDenied
a l'avantage de vous permettre d'afficher votre vue 403 personnaliséesi vous souhaitez lever une exception, vous pouvez utiliser:
Il est documenté ici:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
Contrairement à la returing
HttpResponseForbidden
, la levéePermissionDenied
provoque le rendu de l'erreur à l'aide du403.html
modèle, ou vous pouvez utiliser un middleware pour afficher une vue «Interdit» personnalisée.la source
throw PermissionDenied
n'est pas un appel de fonction, sans le()
à la fin.Vous pouvez éventuellement fournir un modèle personnalisé nommé "403.html" pour contrôler le rendu des erreurs HTTP 403.
Comme l'a correctement souligné @ dave-halter, le modèle 403 ne peut être utilisé que si vous augmentez PermissionDenied
Voici un exemple de vue utilisé pour tester les modèles personnalisés "403.html", "404.html" et "500.html"; veuillez vous assurer de définir DEBUG = False dans les paramètres du projet ou le framework affichera un suivi à la place pour 404 et 500.
la source
Essayez de cette façon, en envoyant un message avec une erreur
la source