sexta-feira, março 30, 2012

Django 1.4 Favicon and ignorable 404

Como colocar um favicon em um website que utiliza Django?

O que imediatamente vem a mente de qualquer desenvolvedor é  que basta adicionarmos uma configuração no arquivo urls.py e tudo estará certo. E é realmente isso que alguns blogs recomendam ser feito.
Teríamos um fonte parecido com este:
#urls.py
import os
from django.conf import settings
from django.conf.urls.defaults import patterns, include, url
from django.views.generic.base import RedirectView

urlpatterns = patterns('',
    url("^favicon\.ico", RedirectView.as_view(
                            url = os.path.join(settings.STATIC_ROOT,
                                "images/favicon.ico"))),
)

Bom, após alguns testes percebi que, mesmo utilizado servidor de desenvolvimento do Django, descobri que isto não funciona. Pois, este servidor ao receber uma requisição na url "^favicon\.ico", ele
automaticamente redireciona a requisição para: "^images/favicon\.ico".

Pensando um pouco melhor:

Será que o Django, sendo um framework para desenvolvimento web, é responsável por atuar como servidor de arquivos? Acredito que não, porque esta é a responsabilidade do WebServer.
Então, após ler mais um pouco da documentação da release 1.4, encontrei um tópico bastante interessante que descreve padrões de URLS que o Django não reportará erros ao encontrar um 404.

Com isso podemos concluir que este tipo de arquivo não será gerenciado pelo Django e sim pelo WebServer, neste caso para concluir a configuração deverá ser realiza WebServer.


terça-feira, março 27, 2012

Konira - an rspec like test suite for Python

Boa Noite Senhores!

Para quem já me conhece sabe que sou obcecado por perfeição e qualidade. Para conseguir garantir estas manias tive que recorrer ao TDD, estou programando há alguns anos e ainda não encontrei um caminho melhor  do que escrever testes para o que será desenvolvido visando garantir a qualidade.

Escrever TestCases conforme o padrão jUnit é massante e cansativo (para não dizer um porre). Pois, além do trabalho gasto com os métodos de testes seguindo o padrão: def test_store_data_on_file() é muito fácil perder a linha do que e de como deve-se testar uma funcionalidade.

Mas então, uma solução muito interessante e agradável de escrever os testes para um app é seguindo uma outra corrente, neste caso a denominada: Behavior Driven Development. Para mais referências dê uma olhada no RSpec um framework de testes para Ruby.

Bom, a ideia deste post não é apresentar um framework para Ruby e sim mostrar aos Pythonianos que em um breve futuro poderemos trabalhar com BDD em Python. Trata-se de um projeto novo chamado Konira. Neste projeto está sendo desenvolvida uma DSL que provê suporte à escrita de testes de modo análogo à testes utilizando o RSpec só que em Python e para Python.

Tive a oportunidade de realizar alguns testes com o Konira e creio que em breve tenhamos uma opção estável e acredito mais pythoniana de escrever testes em Python.

Att!

(para instalar o Konira basta: "pip install konira")

segunda-feira, março 26, 2012

Django 1.4 and Pydev



Neste sábado o Django foi atualizado para a versão 1.4 e na mesma hora decidi atualizar os projetos que atualmente desenvolvo devido às boas novidades da versão. Estas podem ser completamente visualizadas em Release notes.

A atualização da versão recomenda que o script "manage.py" seja atualizado, conforme esta  recomendação. Após alterar o script o Pydev, infelizmente, deixa de funcionar pois,
o Pydev sobrescreve a variável DJANGO_SETTINGS_MODULE de acordo com o diretório do script manage.py. Mesmo alterando as configurações do projeto o problema não é resolvido então
 para resolver este problema proponho a utilização deste script no lugar do manage.py padrão.

#!/usr/bin/env python
import os
import sys


if __name__ == "__main__":

    settings_module = "{{ project_name }}.settings"
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings_module)
    # Principal Mudanca.
    os.environ["DJANGO_SETTINGS_MODULE"] = settings_module

    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)


Após alterar o script é necessário realizar os seguintes passos para que a depuração
funcione corretamente:


Caso queria criar um projeto novo, siga as instruções abaixo:

Para Criar um Projeto Novo

  1. Crie um Projeto do tipo Pydev Django Project;



     

  2.  Ao clicar em Finish este erro irá aparecer, clique Ok e siga em frente:


  3. Veja que o projeto foi criado com sucesso, este erro aparece pois o layout padrão do projeto foi modificado, então basta ignorá-lo.


Pronto, seu projeto está criado.


Configurações de depuração


  1. No Eclipse, clique em Debug Configurations, na lista lateral crie uma nova configuração do tipo PyDev Django;


  2. Indique em Projeto indique o projeto MainModule o script manage.py referente ao projeto;


  3. Na Aba Arguments escreva em: Program Arguments: -> runserver --noreload Working Directory -> Selecione Other e escreva ${project_loc:};


  4. Salve a configuração e utilize-a para depuração.

     
      
Bom só precisa ser feito isso para tudo funcionar, ou voltar a funcionar como antes.

Ao inciar a depuração é comum este erro aparecer Para solucioná-lo basta clicar sobre o nome do projeto que deseja debugar.




Espero ter facilitado a vida de alguém.