Manipulando erros Http 403 (permissão negada) no Django

24 Nov

Olá pessoal :). Recentemente, precisei usar o módulo Auth do Django e suas permissões. É bastante interessante como você pode definir permissões por módulo e usar nas views, templates, etc.

Nosso código de hoje vem da necessidade de trabalhar facilmente com permissões negadas, onde o Django fornece apenas um HttpResponseForbidden, o que não é exatamente interessante de manipular, pois o ideal seria algo como a manipulação de erros 404.

Com essa necessidade desenvolvi um Middleware que intercepta exceções Http403 (vem junto com o pacote), e retorna uma das seguintes opções, na ordem de prioridade:

  1. Uma view customizada, configurada usando handler403 no seu urls.py
  2. Renderiza o template 403.html
  3. Renderiza um template Hardcoded

Para usar o Middleware, siga os procedimentos:

  1. Baixe o projeto no fim deste post, vamos usa-lo de exemplo, ele se chama http403project.
  2. Descompacte e copie o arquivo http.py para algum lugar do seu projeto, no http403project ele fica na raiz.
  3. Adicione o middleware ao settings.py:
    MIDDLEWARE_CLASSES = (
          # ...
          'http403project.http.Http403Middleware',
    )
  4. De raise na view, ex:
    from http import Http403
    def Http403View(request):
      raise Http403(u"This is custom message for permission denied.")
  5. Configure sua view customizada ou template se desejar. Seu template deve ter o nome de 403.html, sua view recebe os argumentos request e exception, o argumento exception contem a mensagem enviada pelo usuário :). No projeto exemplo ele está renderizando o template 403.html, mas existe uma view de exemplo bastante simples no arquivo urls.py

Projeto: http403project.tgz

Ok, é isto, super simples, por hoje é só :), divirtam-se!

Update: Thomas Grainger pediu uma versão licensiada, e colocou atualizações em um gist. Para fazer as coisas da maneira certa eu pus o código em um repositório git em https://github.com/chronossc/http403, com as atualizações do Thomas.

VN:F [1.9.22_1171]
Rating: 4.0/5 (1 vote cast)
Manipulando erros Http 403 (permissão negada) no Django, 4.0 out of 5 based on 1 rating

2 Responses to “Manipulando erros Http 403 (permissão negada) no Django”

  1. Thomas Grainger março 23, 2012 at %H:%M 07Fri, 23 Mar 2012 07:24:08 +000008. #

    I created a version of this to use in my project:

    https://gist.github.com/2169292

    can you explicitly release this into the Public Domain? or under some other license compatible with the APL eg the WTFPL

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)

Leave a Reply