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!