finanpy/
├── core/ # Configurações globais e URLs principais
├── users/ # Extensão do User model do Django
├── profiles/ # Perfis de usuários
├── accounts/ # Contas bancárias
├── categories/ # Categorias de transações
├── transactions/ # Transações financeiras
├── docs/ # Documentação do projeto
├── manage.py # Script de gerenciamento Django
├── requirements.txt # Dependências do projeto
├── db.sqlite3 # Banco de dados SQLite
└── PRD.md # Product Requirements Document
O projeto está organizado em apps Django com responsabilidades bem definidas:
Configurações centrais do projeto Django.
Responsabilidades:
- Configurações globais (
settings.py) - URLs principais (
urls.py) - WSGI e ASGI configuration
Arquivos principais:
settings.py: Configurações do Django, apps instalados, middleware, databaseurls.py: Roteamento principal de URLswsgi.py: Interface WSGI para deployasgi.py: Interface ASGI para aplicações assíncronas
Gerenciamento de usuários do sistema.
Responsabilidades:
- Autenticação de usuários
- Cadastro e login
- Extensão do modelo User padrão do Django
Models: Usa o User model padrão do Django (django.contrib.auth)
Perfis complementares aos usuários.
Responsabilidades:
- Informações adicionais do usuário (nome completo, telefone)
- Relação one-to-one com User
- Criação automática de perfil ao cadastrar usuário
Fields esperados:
user: ForeignKey para User (OneToOne)full_name: Nome completo do usuáriophone: Telefone de contatocreated_at: Data de criaçãoupdated_at: Data de atualização
Gerenciamento de contas bancárias.
Responsabilidades:
- CRUD de contas bancárias
- Controle de saldo de cada conta
- Associação de contas ao usuário
Fields esperados:
user: ForeignKey para Username: Nome da contabank_name: Nome do bancoaccount_type: Tipo de conta (corrente, poupança, etc.)balance: Saldo atualis_active: Status da contacreated_at: Data de criaçãoupdated_at: Data de atualização
Categorização de transações.
Responsabilidades:
- CRUD de categorias
- Diferenciação entre categorias de entrada e saída
- Personalização por usuário
Fields esperados:
user: ForeignKey para Username: Nome da categoriacategory_type: Tipo (income/expense)color: Cor para identificação visualcreated_at: Data de criaçãoupdated_at: Data de atualização
Registro de transações financeiras.
Responsabilidades:
- CRUD de transações
- Associação com contas e categorias
- Registro de entradas e saídas
- Filtragem por período, conta e categoria
Fields esperados:
account: ForeignKey para Accountcategory: ForeignKey para Categorytransaction_type: Tipo (income/expense)amount: Valor da transaçãotransaction_date: Data da transaçãodescription: Descrição/observaçãocreated_at: Data de criaçãoupdated_at: Data de atualização
User (Django Auth)
↓ OneToOne
Profile
User
↓ OneToMany
Account
↓ OneToMany
Transaction
↓ ManyToOne
Category
↓ ManyToOne
User
- Usuário se cadastra no sistema
- Profile é criado automaticamente
- Usuário cria Accounts (contas bancárias)
- Usuário cria Categories para organização
- Usuário registra Transactions associadas a contas e categorias
- Sistema calcula saldos e apresenta no dashboard
O projeto segue o padrão MTV do Django:
- Models: Definição de dados e lógica de negócio
- Templates: Apresentação visual (Django Template Language)
- Views: Lógica de controle e processamento
Cada funcionalidade está isolada em seu próprio app, facilitando:
- Manutenção independente
- Reuso de código
- Testes isolados
- Escalabilidade
- Código em inglês
- Aspas simples
- PEP 8
- Todos os models têm
created_ateupdated_at
- Banco de dados padrão do Django
- Ideal para desenvolvimento e MVP
- Arquivo único:
db.sqlite3
A arquitetura permite migração fácil para PostgreSQL quando necessário, sem alteração de código dos models.
- Django Auth nativo
- Hash de senhas com PBKDF2
- Validação de força de senha
- Middleware de autenticação
- Decoradores
@login_required - Isolamento de dados por usuário
- Middleware CSRF ativo
- Tokens em todos os formulários
- Use
select_related()para ForeignKeys - Use
prefetch_related()para relações reversas - Evite N+1 queries
- Template fragment caching quando necessário
- Database query caching para relatórios
O projeto está preparado para:
- Migração para PostgreSQL
- Adição de novos apps/módulos
- Implementação de API REST (Django REST Framework)
- Deploy em serviços cloud (Heroku, AWS, etc.)