Comment puis-je soulever une réponse interdite dans django

J’aimerais faire ce qui suit:

raise HttpResponseForbidden() 

Mais j’ai l’erreur:

 exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden 

Comment devrais-je faire ça?

Renvoyez-le de la vue comme vous le feriez pour toute autre réponse.

 from django.http import HttpResponseForbidden return HttpResponseForbidden() 

Si vous souhaitez générer une exception, vous pouvez utiliser:

 from django.core.exceptions import PermissionDenied raise PermissionDenied 

Il est documenté ici:

https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view

Au lieu de HttpResponseForbidden , le fait de HttpResponseForbidden PermissionDenied provoque le rendu de l’erreur à l’aide du modèle 403.html , ou vous pouvez utiliser un middleware pour afficher une vue “Interdite” personnalisée.

Vous pouvez éventuellement fournir un modèle personnalisé nommé “403.html” pour contrôler le rendu des erreurs HTTP 403.

Comme indiqué correctement par @ dave-halter, le modèle 403 ne peut être utilisé que si vous relancez PermissionDenied

Vous trouverez ci-dessous un exemple de vue permettant de tester les modèles personnalisés “403.html”, “404.html” et “500.html”; s’il vous plaît assurez-vous de définir DEBUG = False dans les parameters du projet ou le cadre affichera une trace au lieu de 404 et 500.

 from django.http import HttpResponse from django.http import Http404 from django.core.exceptions import PermissionDenied def index(request): html = """ < !DOCTYPE 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)