domingo, 19 de abril de 2009

Padrões de projeto com Django

Para quem não sabe, Django é o framework web mais maduro atualmente disponível para python. Ele é rápido, robusto, e elegante, entretanto, é muito comum as pessoas codificarem com ele da forma que desejam. Às vezes isso é algo bom, às vezes não. Pensando nisso, resolvi citar aqui algums padrões que utilizo no desenvolvimento de meus projetos e aplicativos, para aqueles que estão começando e gostariam de saber como estruturar um projeto Django de forma legível e extensível. Enjoy!

Receitas

  1. Desenvola seu projeto utilizando um aplicativo para cada parte do projeto. Projetos que possuem poucos aplicativos "entupidos" de código devem ser evitados.

  2. Sempre que utilizar um aplicativo de terceiros, dê uma olhada no código do mesmo. Esta á uma excelente forma de enteder como funciona e como tirar melhor proveito do mesmo.

  3. Evite criar dependência entre os aplicativos, sempre que possível. Ou seja, não importe código de outros aplicativos do seu projeto caso não seja necessário.

  4. Não tenha medo de utilizar aplicativos que já vem com o próprio Django, como o flatpages, para páginas ordinárias.

  5. Se você deseja criar páginas específicas para um determinado projeto, mas que não parecem "encaixar" em nenhum dos aplicativos, você pode criar um aplicativo chamado website, e colocar o código esdrúxulo nela. Também muito útil para colocar tags e filtros customizados.

  6. Não tenha receio de criar tags e filtros específicos para o seu projeto. Tags são especialmente úteis para criar comportamentos semelhantes em todas as páginas de um projeto.

  7. Inicie cada um dos seus arquivos .py definindo o encoding do seu código com a seguinte:
    # -*- coding:utf-8 -*-
    Essa pequena linha vai lhe evitar muitas dores de cabeça com unicode.

  8. Reescreva o método __unicode__ de cada um dos seus modelos definidos.

  9. Ao definir uma url no seu urls.py, procure sempre fazê-lo utilizando o atalho url, e defina um nome fictício para sua url. Isso torna a codificação e mudanças no código bem mais fáceis. Exemplo:
    # bom!
    url("^shop/$", shop.index, name="shop.home"),
    # ruim...
    ("^forum/$", forum.index)

  10. Mantenha os templates de cada aplicativo dentro de uma pasta templates no próprio aplicativo.

  11. O projeto deve ter uma pasta principal chamada templates, onde páginas como base.html(página raiz extendida por outras páginas do aplicativo), 404.html e 500.html devem estar presentes.

  12. Criar uma página form.html dentro da pasta padrão templates do projeto é uma forma útil de se manter um padrão entre os seus formulários. Por exemplo, quando você quiser mostrar um formulário para o usuário, basta retornar o formulário na resposta da requisição e "incluir" a página form.html no seu template. Apenas tome cuidado para não fazê-lo de forma imprudente, a tag include do Django não é um grande exemplo de eficiência.

  13. Caso precise criar configurações para um aplicativo específico do projeto, não jogue essas configurações diretamente no settings.py. O settings.py já é um arquivo bem grande por sí só, e novas variáveis devem ser evitadas, ali. Uma abordagem muito interessante é criar um arquivo app_settings.py no seu aplicativo e colocar as configurações do aplicativo lá. Uma solução interessante para quem, ainda assim, quiser colocar as configurações dos aplicativos no settings.py é a seguinte: importe o settings.py no seu app_settings.py e tente configurar as variáveis do seu app_settings através de variáveis do settings.py da seguinte forma:
from django.conf import settings
# note que primeiro eu checo se a variavel esta definida no settings
# caso contrário, eu utilizo o valor definido no app_settings
ITEMS_PER_PAGE = getattr(settings, "ITEMS_PER_PAGE", 16)
Por enquanto, é só. rsrsrs, essa é a forma que eu trabalho, e espero que vocês gostem. Abraço!

Nenhum comentário:

Arquivo do blog