segunda-feira, 24 de agosto de 2009

Novos recursos do Admin - date_hierarchy


O date_hierarchy já funciona apartir da versão 1.0 e proporciona um filtro muito útil para a listagem dos dados de algum módulo. Ele monta uma estrutura para navegação pelas datas dos registro ali listados.

Para utilizá-lo é bem simples. Qualquer classe que possua um campo do tipo DateField pode fazer uso do mesmo. Basta colocar a seguinte linha dentro da classe do admin do seu model, dentro do admin.py

date_hierarchy = ('data')

Onde 'data' é o nome do seu atributo.

Note que ao fazer isso, logo acima da listagem dos dados vai surgir alguns links com os anos que possuem conteudo dentro daquele módulo. Ao clicar no ano, aparecerão os meses e posteriormente os dias que possuem algum conteúdo.




hasta!

sábado, 8 de agosto de 2009

Retomando......

É.....faz tempo que não posto nada.
Desde do último post muita coisa mudou no Django. Aprendi várias coisas novas que serão abordadas nos próximos tópicos.

Tais mudanças vieram junto com o a nova versao do Django. Estou ulizando a versão 1.1 beta 1. Para atualizar basta fazer o update com o svn na pasta do fonte do Django, apagar a pasta do Django que está em \Lib\site-packages e rodar o seguinte comando dentro da pasta fonte do Django:

python setup.py install

Fazendo o update, provavelmente virá uma versão mais nova que a minha, porém provavelmente não terá nenhuma mudança drástica.

Espero que desta vez, não haja tamanha demora para postagens de novos conteúdos.

hasta!

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!