Respostas:
Retorne-o da visualização como faria com qualquer outra resposta.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
raise PermissionDenied
tem a vantagem de permitir que você mostrar o seu costume 403 vista
Se você deseja gerar uma exceção, pode usar:
from django.core.exceptions import PermissionDenied
def your_view(...):
raise PermissionDenied()
Está documentado aqui:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
Ao contrário da repetição HttpResponseForbidden
, o aumento PermissionDenied
faz com que o erro seja renderizado usando o 403.html
modelo ou você pode usar o middleware para mostrar uma visualização "Proibida" personalizada.
throw PermissionDenied
não dizem como uma chamada de função, sem a ()
no final.
Opcionalmente, você pode fornecer um modelo personalizado chamado "403.html" para controlar a renderização de erros HTTP 403.
Conforme corretamente indicado por @ dave-halter, o modelo 403 só pode ser usado se você aumentar PermissionDenied
Abaixo está uma visualização de exemplo usada para testar modelos personalizados "403.html", "404.html" e "500.html"; certifique-se de definir DEBUG = False nas configurações do projeto, ou a estrutura mostrará um retorno para 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)
Tente desta maneira, enviando mensagem com erro
from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
Http404
mas nãoHttp403
? Por que a inconsistência?