Risposte:
Restituiscilo dalla vista come faresti con qualsiasi altra risposta.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDeniedha il vantaggio di farti mostrare la tua vista 403 personalizzata
se vuoi sollevare un'eccezione puoi usare:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
È documentato qui:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
A differenza della returing HttpResponseForbidden, il rilancio PermissionDeniedprovoca il rendering dell'errore utilizzando il 403.htmlmodello oppure è possibile utilizzare il middleware per mostrare una vista "Proibita" personalizzata.
throw PermissionDeniednon dicono come una chiamata di funzione, senza il ()alla fine.
Se lo desideri, puoi fornire un modello personalizzato chiamato "403.html" per controllare il rendering degli errori HTTP 403.
Come sottolineato correttamente da @ dave-halter, il modello 403 può essere utilizzato solo se si aumenta PermissionDenied
Di seguito è riportata una vista di esempio utilizzata per testare i modelli personalizzati "403.html", "404.html" e "500.html"; assicurati di impostare DEBUG = False nelle impostazioni del progetto o il framework mostrerà invece un traceback per 404 e 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)
Prova in questo modo, inviando un messaggio con errore
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Http404ma noHttp403? Perché l'incoerenza?