Como organizar seus projetos Django

AGRADEÇA AO AUTOR COMPARTILHE!

Olá pessoas!

Pretendo compartilhar com vocês a forma que venho utilizando para organizar meus projetos Django com o uso do virtualenv. Não entrarei em muitos detalhes, até porque você verá que é um procedimento muito simples, mas que poderá garantir melhor organização dos seus projetos e dos seus ambientes de desenvolvimento.

É interessante que você leia o postPython, Django e virtualenv” antes de continuar.

Simplesmente um projeto Django

Antes de conhecer (e utilizar) o virtualenv, utilizei algo parecido com o modelo “tradicional”  de organização de pastas e códigos em um projeto Django. Ou seja, parecido com aquela estrutura padrão gerada pelo comando django-admin.py startproject.

O modelo é bom, e funcionou para mim durante muito tempo. Mas de uns tempos para cá venho utilizando o esquema abaixo (confira um exemplo real):

A diferença principal está na utilização da pasta apps para encapsular as aplicações do projeto, e a criação de uma pasta (ou pacote, como preferir) core. Nesta última, gosto de armazenar snippets de código que serão aproveitados pelo projeto inteiro.

Outro ponto que vale ser notado é a criação de uma pasta chamada tests para cada app. Embora haja casos em que um arquivo tests.py seja o suficiente, podemos nos deparar com um arquivo gigantesco testando vários aspectos de uma app (o que pode dificultar a legibilidade de código). Categorizar os testes por tipo, e em arquivos separados, irá facilitar a adição de novos testes e funcionalidades.

A abordagem dos testes também pode ser utilizada para o urls.py. Quando o seu arquivo de roteamento ficar muito grande, crie uma pasta urls e “quebre” suas rotas em arquivos diferentes. Categorize-os, sinta-se “zen” e nunca mais tenha medo de criar URLs novamente :P

Comecei a utilizar esta estrutura após “xeretar” alguns projetos Django open source. Posso dizer por experiência própria que é uma prática interessante, e que tem me ajudado muito na organização de código.

O projeto Django com o virtualenv

Tratando-se do ambiente de desenvolvimento (construído pelo virtualenv), já utilizei-o de duas formas:

  • O environment em uma pasta separada do projeto: Você pode possuir uma pasta “environments” e lá ter diferentes ambientes para diferentes projetos.
  • O projeto Django ficar dentro da pasta de environment: Você primeiramente constrói um ambiente com o virtualenv, e depois cria um projeto dentro dessa mesma pasta (como demonstrado neste post do Osvaldo Santana).

Particularmente eu prefiro a segunda opção (nunca precisei de 2 environments idênticos). Além de manter todo o seu projeto agrupado, fica mais fácil para criação de scripts de automatização de deploy, por exemplo.

No fim das contas, geralmente a estrutura de pastas dos projetos Django fica assim:

E você? De que forma organiza os seus projetos em Django? Conte-nos através dos comentários abaixo!

Até a próxima…

Fonte: Blog Klaus Laube

AGRADEÇA AO AUTOR COMPARTILHE!

Klaus Peter Laube

Mais artigos deste autor »

Tecnólogo em Análise e Desenvolvimento de Sistemas pelo Centro Universitário de Jaraguá do Sul (UNERJ). Desenvolvedor Web de longa data, apaixonado por Python e defensor dos padrões Web. Escreve quando pode no http://www.klauslaube.com.br.


1 Comentários

André @ C0D1X
1

Olá Klaus,

Estava aqui navegando pela profissionaisti e encontrei teu post e não pude deixar de ler. Estou incrivelmente feliz que os programadores, como você, estão se preocupando com a estruturação de um código fonte. Na época que cursei a faculdade de computação tudo parecia muito lindo, mas depois fomos aprendendo na vida real que as coisas não eram bem como estavam nos livros…

Fico mais contente ainda de ver que se trata de uma linguagem aberta. Open Source está cada vez mais mostrando ao mundo que 2 cabeças sempre irão pensar melhor do que uma única.

Grande abraço e continue sempre evoluindo!

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">