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 m'y prendre ?
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 m'y prendre ?
Si vous voulez 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
Par opposition à la rétention HttpResponseForbidden
, en levant PermissionDenied
fait en sorte que l'erreur soit rendue à l'aide de la méthode 403.html
ou vous pouvez utiliser un intergiciel pour afficher une vue "interdite" personnalisée.
Vous pouvez toujours fournir un middleware avec une méthode process_exception et rendre votre vue à partir de là.
Jack, oui vous pouvez -- faire quelque chose comme : raise PermissionDenied("No logged in user")
Pourquoi existe-t-il une classe d'exception Http404
mais pas Http403
? Pourquoi cette incohérence ?
@Flimm stackoverflow.com/questions/3297048/ Je ne suis pas sûr pour Django, mais le cadre REST de Django a : from rest_framework import status status.HTTP_403_FORBIDDEN 403
Vous pouvez éventuellement fournir un modèle personnalisé nommé "403.html" pour contrôler le rendu des erreurs 403 HTTP.
Comme l'a correctement souligné @dave-halter, Le modèle 403 ne peut être utilisé que si vous obtenez PermissionDenied.
Vous trouverez ci-dessous un exemple de vue utilisée pour tester les modèles personnalisés "403.html", "404.html" et "500.html" ; Assurez-vous de mettre DEBUG=False dans les paramètres du projet. ou le framework montrera une traceback à 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="http://stackoverflow.com/">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)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.