django project app

Projeto e aplicativos

A área de trabalho de um projeto Django é dividida em partes menores. Ao menos duas partes são bem distintas: projeto e aplicativos.

Um projeto é um conjunto de configurações (como URLs, conexões com banco de dados etc) e aplicativos que são usados em uma instância do Django. Todo projeto deve ser versionado em um repositório de código, como o git.

Um aplicativo é um conjunto de funcionalidades correlacionadas, implementadas por models, templates, views e forms. Aplicativos devem ser modulares e reutilizáveis; portanto também devem ser versionados em repositórios. Diversos aplicativos de terceiros estão disponíveis, trazendo funcionalidaeds prontas.

Por exemplo, o projeto de um site pessoal pode ter um aplicativo de blog posts, outro aplicativo de chat interativo e também um aplicativo de autenticação externa.

1 Projeto

Primeiro, inicialize um repositório com o git:

(venv)$ git init repositorio

Então crie um projeto dentro dele com django-admin:

(venv)$ django-admin startproject projeto repositorio

Adicione o início do projeto no repositório:

(venv)$ cd repositorio
(venv)$ echo '*.pyc' >>.gitignore
(venv)$ git add .
(venv)$ git commit -m 'inicio do projeto'

2 Aplicativo

No diretório do repositório do projeto, crie um aplicativo:

(venv)$ ./manage.py startapp app

É desejável que esse aplicativo também seja versionado. Ele pode ser mantido no repositório do projeto ou em um repositório próprio (através de um submódulo do git, por exemplo) quando ele for usado por outros projetos.

3 Resumo

Neste momento devem haver ao menos quatro diretórios importantes criados pelos últimos passos:

venv
ambiente virtual com os pacotes instalados do PyPI
repositorio
repositório de versionamento do projeto e de todas as suas dependências
projeto
configurações do projeto, necessárias para desenvolvimento e produção
app
aplicativo que implementa uma funcionalidade e é possivelmente versionado em repositório independente do projeto
venv
├── bin/
├── include/
├── lib/
├── lib64 -> lib/
└── pyvenv.cfg
repositorio
├── .git/
├── manage.py*
└── projeto/
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    ├── wsgi.py
    └── app/
        ├── __init__.py
        ├── admin.py
        ├── apps.py
        ├── migrations/
        │   └── __init__.py
        ├── models.py
        ├── tests.py
        └── views.py

Obs.: O django-admin startproject pode criar o diretório do repositório, se não fornecermos o último parâmetro. Mas ele terá o mesmo nome do projeto e não será versionado.