Quando se trata de desenvolvimento web com Django, a organização do seu projeto desempenha um papel crucial para facilitar o desenvolvimento, a manutenção e a colaboração. Aqui está a estrutura de organização do projeto que decidi adotar, inspirada pelo livro "Django 3 Web Development Cookbook Fourth Edition" (Copyright © 2020 Packt Publishing), e por que isso faz sentido para mim.
📂 project_root
├── 📂 .vscode # Configurações do Visual Studio Code
│ └── 📄 settings.json
├── 📂 commands # Armazena scripts e comandos customizados
├── 📂 db_backups # Armazena backups do banco de dados
│ └── 📄 db.json
├── 📂 myproject # Diretório principal do projeto Django
│ ├── 📂 apps # Diretório para aplicativos Django
│ │ ├── 📂 core # Aplicativo "core"
│ │ │ ├── 📄 __init__.py
│ │ │ └── 📄 versioning.py
│ │ └── 📄 __init__.py
│ ├── 📂 base_static # Arquivos estáticos compartilhados
│ │ └── 📂 global
│ │ ├── 📂 css
│ │ ├── 📂 img
│ │ └── 📂 javascript
│ ├── 📂 base_templates # Modelos HTML compartilhados
│ │ └── 📂 global
│ │ ├── 📄 base.html
│ │ └── 📂 partials
│ │ ├── 📄 _footer.html
│ │ ├── 📄 _header.html
│ │ └── 📄 _pagination.html
│ ├── 📄 __init__.py
│ ├── 📄 asgi.py # Configuração ASGI para deploy
│ ├── 📄 settings.py # Configurações do projeto
│ ├── 📄 urls.py # URLs do projeto
│ └── 📄 wsgi.py # Configuração WSGI para deploy
├── 📂 env # Ambiente virtual (pode variar de acordo com a preferência)
├── 📂 utils # Módulos utilitários
├── 📄 .env # Arquivo de variáveis de ambiente
├── 📄 .gitignore # Para manter a estrutura do projeto limpa
├── 📄 db.sqlite3 # Banco de dados SQLite3
├── 📄 LICENSE # Arquivo de licença do projeto
├── 📄 manage.py # Script de gerenciamento do Django
├── 📄 README.md # Documentação do projeto
└── 📄 requirements.txt # Lista de dependências do projeto
Aqui é onde toda a mágica acontece. Você pode pensar neste diretório como o coração do seu projeto. É aqui que configuramos tudo, desde as configurações principais até as URLs e aplicativos. É o ponto de partida para todas as funcionalidades.
Manter os aplicativos em um diretório separado ajuda a modularizar o projeto. Cada aplicativo é uma unidade funcional que pode ser desenvolvida, testada e implantada independentemente. Isso promove a reutilização de código e a escalabilidade do projeto.
Para uma organização ainda mais clara, os arquivos dentro de cada aplicativo agora estão separados em pastas específicas:
-
models/: Contém os modelos do aplicativo. Exemplo:
blog/models/post_model.py
para postagens,users/models/user_model.py
para usuários, ecomments/models/comment_model.py
para comentários. -
views/: Armazena as visualizações do aplicativo. Exemplo:
blog/views/post_views.py
para exibir postagens,users/views/user_views.py
para autenticação e perfis, ecomments/views/comment_views.py
para comentários. -
forms/: Inclui os formulários e suas validações. Exemplo:
users/forms/user_forms.py
para formulários de registro e autenticação. -
templates/: Armazena os arquivos HTML para a renderização das páginas. Exemplo:
blog/templates/blog/post_list.html
para listar postagens,users/templates/users/user_profile.html
para perfis de usuário, ecomments/templates/comments/comment_form.html
para formulários de comentário.
O aplicativo "core" é um lugar que pode ser imaginado como um lugar onde você coloca funcionalidades essenciais e comuns que não têm relação direta com outros aplicativos. É como uma caixa de "itens essenciais" que são fundamentais para o projeto como um todo, mas não se encaixam perfeitamente em nenhum dos outros aplicativos específicos.
Esses diretórios contêm arquivos estáticos (como CSS, imagens e JavaScript) e modelos HTML compartilhados. Ter esses recursos centralizados ajuda a manter uma aparência consistente em todo o projeto e a evitar duplicação de código.
Lembre-se: Para integrar novos aplicativos no Django, é necessário especificar o caminho dentro do arquivo apps.py de cada aplicativo, indicando o trajeto em relação à raiz do projeto (por exemplo, myproject.apps.core). Posteriormente, é crucial adicionar esse caminho na seção "INSTALLED_APPS" do arquivo settings.py. Essa prática assegura que o Django reconheça e incorpore as funcionalidades do aplicativo no projeto.