Réponses:
Renvoyez-le de la vue comme vous le feriez pour toute autre réponse.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDenied
a l'avantage de vous permettre d'afficher votre vue 403 personnalisée
si vous souhaitez lever une exception, vous pouvez utiliser:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
Il est documenté ici:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
Contrairement à la returing HttpResponseForbidden
, la levée PermissionDenied
provoque le rendu de l'erreur à l'aide du 403.html
modèle, ou vous pouvez utiliser un middleware pour afficher une vue «Interdit» personnalisée.
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.
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 de cette façon, en envoyant un message avec une erreur
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Http404
mais pasHttp403
? Pourquoi cette incohérence?