Eu gostaria de fazer o seguinte:
raise HttpResponseForbidden()
Mas eu recebo o erro:
exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden
Como devo fazer isso?
Retorne-o da visualização como faria com qualquer outra resposta.
from django.http import HttpResponseForbidden
return HttpResponseForbidden()
Http404
mas nãoHttp403
? Por que a inconsistência?raise PermissionDenied
tem a vantagem de permitir que você mostrar o seu costume 403 vistaSe você deseja gerar uma exceção, pode usar:
Está documentado aqui:
https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view
Ao contrário da repetição
HttpResponseForbidden
, o aumentoPermissionDenied
faz com que o erro seja renderizado usando o403.html
modelo ou você pode usar o middleware para mostrar uma visualização "Proibida" personalizada.fonte
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.
fonte
Tente desta maneira, enviando mensagem com erro
fonte