J'aimerais faire ce qui suit:
raise HttpResponseForbidden()
Mais je reçois 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 avec toute autre réponse.
from Django.http import HttpResponseForbidden
return HttpResponseForbidden()
si vous voulez lever une exception, vous pouvez utiliser:
from Django.core.exceptions import PermissionDenied
raise PermissionDenied
C'est documenté ici:
https://docs.djangoproject.com/fr/stable/ref/views/#the-403-http-forbidden-view
Contrairement à la rétention de HttpResponseForbidden
, la levée de PermissionDenied
entraîne le rendu de l'erreur à l'aide du modèle 403.html
. Vous pouvez également utiliser un middleware pour afficher une vue "Interdit" personnalisée.
Vous pouvez éventuellement fournir un modèle personnalisé nommé "403.html" pour contrôler le rendu des erreurs HTTP 403.
Comme correctement souligné par @dave-halter, Le modèle 403 ne peut être utilisé que si vous augmentez PermissionDenied
Vous trouverez ci-dessous un exemple d’affichage permettant de tester les modèles personnalisés "403.html", "404.html" et "500.html"; assurez-vous de définir DEBUG = False dans les paramètres du projet ou le cadre affichera une trace à la place pour 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>
<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)
Essayez cette manière, en envoyant un message avec erreur
from Django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")