Chronosbox

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

by Felipe 'chronos' Prenholato on Saturday, 13 March/2010, under Apps e extensões, Django

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!

:, , , , , ,

Leave a Reply

StatPress

Visits today: 24 Visits since 6 de abril de 2009: 7741 Visitors now: %visitoronline%