Ola, vou iniciar uma série de posts abordando a instalação e a organização de um projeto Django, utilizando a versão 1.5.5.

Muitas das dicas citadas aqui, foram retiradas do livro Two Scoops of Django: Best Practices For Django 1.5, o qual recomendo e muito a leitura.

Lembrando que as dicas aqui apresentadas não são regras a serem seguidas a risca. Cada um tem o livre arbitrio e pode decidir a melhor maneira de organizar seu projeto.

O Projeto

Para iniciarmos um projeto é necessário termos uma inspiração ou uma idéia bem definida. Nesta série, escolhi algo simples de ser implementado baseado no site EmberWatch, o curso do Henrique Bastos Welcome to the Django e as palestras que são ministradas por pythonistas (por exemplo) de todo o Brasil, denominada mutirão python.

Após uma breve introdução, vamos iniciar o tutorial.

Criando o ambiente virtual.

Para iniciar o ambiente virtual recomendo a leitura do post Enfim o ambiente python, que nos mostra a instalação do ambiente python com o virtualenvwrapper utilizado logo abaixo.

~/workspace-django » mkvirtualenv pywatch
New python executable in pywatch/bin/python2.7
Also creating executable in pywatch/bin/python
Installing setuptools............done.
Installing pip...............done.

Em seguida crie o diretório onde ficara o codigo e acesse a pasta criada.

mkdir pywatch.com.br/ && cd pywatch.com.br/

Instalando o Django

Instale o Django através do pip.

(pywatch)
~/workspace-django/pywatch.com.br » pip install django==1.5.5

Após a instalação, inicialize um projeto com o comando abaixo.

(pywatch)
~/workspace-django/pywatch.com.br » django-admin.py startproject pywatch .
(pywatch)
~/workspace-django/pywatch.com.br » ls
manage.py  pywatch
(pywatch)
~/workspace-django/pywatch.com.br » ls pywatch
 __init__.py  settings.py  urls.py  wsgi.py

Observe o retorno do comando ls possui o script manage.py, muito usado durante o desenvolvimento e a pasta criada inicialmente com o nome do projeto, que contém o settings.py, o urls.py) e o _wsgi.py.

Esse é o startup inicial que o Django nos oferece.

Agora vamos melhorar nossa estrutura.

Organizando os requirements

Entre dentre do diretório pywatch.

~/workspace-django/pywatch.com.br » cd pywatch
(pywatch)
~/workspace-django/pywatch.com.br/pywatch »

Crie uma pasta chamada requirements e acesse ela.

~/workspace-django/pywatch.com.br/pywatch » mkdir requirements && cd requirements
(pywatch)
~/workspace-django/pywatch.com.br/pywatch/requirements »

Crie um arquivo txt contendo os pacotes básicos para o projeto, e os já instalados pelo Django.

(pywatch)
~/workspace-django/pywatch.com.br/pywatch/requirements » pip freeze > base.txt
(pywatch)
~/workspace-django/pywatch.com.br/pywatch/requirements » cat base.txt
Django==1.5.5
wsgiref==0.1.2

Veja que listou apenas 02 pacotes instalados no sistema.

Edite o arquivo base.txt e adicione os pacotes abaixo, para dar sequência ao desenvolvimento do projeto.

  1. South>=0.8.1
  2. Unipath>=1.0
  3. psycopg2
  4. django-extensions
  5. flake8
  6. django_compressor
  7. dj-database-url
  8. django-decouple

Seu arquivo base.txt deve se aparecer com este.

Observação, não se preocupe com os pacotes aqui adicionados, eles serão explicados brevemente em um novo post.

~/workspace-django/pywatch.com.br/pywatch/requirements » cat base.txt
Django==1.5.5
wsgiref==0.1.2
South>=0.8.1
Unipath>=1.0
psycopg2
django-extensions
flake8
django_compressor
dj-database-url
django-decouple

Instale os pacotes inseridos no arquivo base.txt através do comando:

(pywatch)
~/workspace-django/pywatch.com.br/pywatch/requirements » pip install -r base.txt

Aguarde até o fim da instalação dos pacotes...

Múltiplos requirements, para cada caso

O objetivo central dessa parte é separar os pacotes básicos do projeto, com os pacotes de desenvolvimento/testes, pacotes de integração continua e finalmente os pacotes de produção.

Para isso crie o seguinte arquivo:

Todos os outros arquivos serão uma cópia modificada deste com seus respectivos pacotes.

(pywatch)
~/workspace-django/pywatch.com.br/pywatch/requirements » touch dev.txt

Edite o arquivo e adicine as seguintes linhas.

  1 -r base.txt
  2
  3 django-debug-toolbar
  4 coverage>=3.6
  5 django-discover-runner>=0.2.2
  6 model-mommy
  7 setuptools>=0.8
  8 ipython
  9 yolk
 10 ipdb
 11 django_nose
 12 nose
 13 splinter

Ps. Eu amo o vim!

Para o ambiente de desenvolvimento e testes utilizo esses pacotes criados acima. Nada impede que você utilize os de seu gosto.

Descrição da linha 1:

  1. Importa os pacotes inseridos no arquivo base.txt. Ou seja, os pacotes como Django, psycopg, dj-database-url... Serão automaticamente inseridos no arquivo dev.txt.

Agora crie os seguintes arquivos, com seus respectivos pacotes.

(pywatch)
~/workspace-django/pywatch.com.br/pywatch/requirements » touch production.txt

Pacotes em produção:

  1 -r base.txt
  2 gunicorn>=0.17

E o arquivo contendo os pacotes para integração contínua.

(pywatch)
~/workspace-django/pywatch.com.br/pywatch/requirements » touch ci.txt

Pacotes:

  1 -r base.txt
  2
  3 coverage==3.6
  4 django-discover-runner==0.2.2
  5 django-jenkins==0.13.0
  6 model-mommy
  7 django_nose
  8 nose

Concluindo...

Separando os pacotes em vários arquivos, temos uma organização melhor em nosso projeto. Sendo que os pacotes de desenvolvimento não irão se misturar com os pacotes de produção não havendo instalações desnecessárias.

Agora vamos fazer a instalação dos pacotes de desenvolvimento em nosso ambiente virtual.

(pywatch)
~/workspace-django/pywatch.com.br/pywatch/requirements » pip install -r dev.txt

No próximo post, iremos organizar os settings para cada tipo de uso. Aguardem =)

Ps, não se esqueçam de uma coisa...

Versionar sempre!!!

~/workspace-django/pywatch.com.br » git init
Initialized empty Git repository in /home/lucas/workspace-django/pywatch.com.br/.git/

(pywatch)
~/workspace-django/pywatch.com.br(branch:master*) » git add .

(pywatch)
~/workspace-django/pywatch.com.br(branch:master*) » git commit -m "Iniciando o projeto pywatch"
[master (root-commit) c86641e] Iniciando o projeto pywatch
 9 files changed, 243 insertions(+)
 create mode 100644 manage.py
 create mode 100644 pywatch/__init__.py
 create mode 100644 pywatch/requirements/base.txt
 create mode 100644 pywatch/requirements/ci.txt
 create mode 100644 pywatch/requirements/dev.txt
 create mode 100644 pywatch/requirements/production.txt
 create mode 100644 pywatch/settings.py
 create mode 100644 pywatch/urls.py
 create mode 100644 pywatch/wsgi.py

(pywatch)
~/workspace-django/pywatch.com.br(branch:master) » git remote add origin git@github.com:lucassimon/pywatch.com.br.git

(pywatch)
~/workspace-django/pywatch.com.br(branch:master) » git push -u origin master

Link do projeto PyWatch.

Obrigado a todos,

Até a proxima.