Quem sou eu

Minha foto

Formado em Computação, desenvolvedor web, interessado em tecnologia, metaleiro e um gamer inveterado.

Pesquisar

domingo, 1 de fevereiro de 2009

Parte 6 - Login com autenticação pelo sistema do Django

Neste post veremos como fazer a autenticação com o login do django criado na parte 5.
Primeiro, abra o settings.py do seu projeto e adicione as seguintes linhas abaixo da setting ROOT_URL:




Essa tupla irá passar diretamente para o template os modulos de request, autenticação, debug e internacionalização.

No caso do request, isso poupará muito trabalho nos templates, pois desta forma acessaremos POST, GET e SESSION de forma direta.


Coloque também no settings.py, abaixo das configurações do banco de dados as seguintes settings:

# ESQUEMA DE LOGIN
AUTH_PROFILE_MODULE = 'cadastro.cadastro'
LOGIN_URL = '/cadastro/login/'


Estas settings definem que o módulo de autenticação será o modulo de cadastro e qual é a url para efetuar o login.

Esta url será utilizada mais a frente.


Com o settings.py alterado, deixe o views.py do módulo de cadastro da seguinte forma:



Na linha 3 temos a importação dos metodos de autenticação que utilizaremos.
Para acessar o request de forma direta no template (sem a necessidade de passá-lo em todos os render_to_response) se faz necessário a importação da linha 5 e o parâmetro opcional abaixo para o template em questão:

context_instance=RequestContext(request, {})



Neste exemplo, utilizarei a mesma def para exibir o formulário e para efutar o login. Na linha 10, caso já exista o id do usuário vindo pelo request, significa que o usuário já está logado no sistema, caso contrário irá para o teste seguinte na linha 14.

O metodo authenticate utilizado na linha 17 é o responsável por tentar recuperar o usuário que contenha nos atributos username e password os valores postados pelo formulário. Se o objeto u receber um valor válido para usuário (linha 18) e se o atributo is_active (usuário ativo, linha 19) for True, o método authlogin fará a autenticação para o usuário em questão.

Na linha 22 temos um recurso interessante do Django. Caso seja solicitada uma view que requer login, automaticamente isto será tratado e usuário será redirecionado para o formulário de login (definido na setting LOGIN_URL previamente descrita). Quando o mesmo entrar com usuário e senha, o usuário será redirecionado para o link previamente solicitado que é passado por GET para a variável next. Veremos abaixo como definir que uma view precisará de login.

O Django também já possui implementado o método de logout (linha 30) que tira o usuário logado de todos os atributos da SESSION.

Vamos ver como obrigar o usuário logar para ver um determinado conteúdo. Abra o arquivo cd/views.py e deixe-o da seguinte forma:




Aqui a alteração é bem simples, apenas precisamos importar o decorator login_required com a linha 6, e utilizá-lo logo antes de cada def que desejarmos, como visto na linha 8. Toda vez que a def escolhida for chamada, será feito a verificação de login para a exibição da mesma.



Agora apenas falta criar os htmls e as urls para login. Crie 2 htmls conforme as imagens abaixo:

login.html

logado.html



Crie um arquivo com nome de urls.py dentro da app cadastro da seguinte forma:



Agora basta dar o include das urls de cadastro no urls.py da raiz do projeto:

(r'^cadastro/', include('app.cadastro.urls')),


Rode o projeto com o comando runserver e faça os testes necessários.

svn: Revision 9
hasta!