Aplicação web de controle financeiro pessoal desenvolvida com Flask e MySQL. Permite registrar receitas e despesas, organizá-las por categoria e visualizar relatórios com gráfico de pizza.
- Transações — cadastro, edição e exclusão de receitas e despesas
- Filtro por tipo (receita / despesa) na página inicial
- Categorias — CRUD completo; 20 categorias padrão pré-cadastradas automaticamente
- Relatório — totais de receitas, despesas e saldo; tabela e gráfico de pizza com distribuição de despesas por categoria (Chart.js)
- Página 404 personalizada
- Interface responsiva com Bootstrap 5
| Camada | Tecnologia |
|---|---|
| Backend | Python 3 · Flask 3 · SQLAlchemy 2 |
| Banco de dados | MySQL · PyMySQL |
| Frontend | Bootstrap 5 · Chart.js 4 |
| Deploy | Procfile (compatível com Heroku / Railway) |
finance_app/
├── app/
│ ├── __init__.py # Application factory, db.create_all(), seed de categorias
│ ├── models.py # Modelos ORM: Categoria e Transacao
│ ├── routes.py # Todas as rotas (Blueprint `main`)
│ └── templates/
│ ├── base.html
│ ├── index.html
│ ├── adicionar.html
│ ├── editar.html
│ ├── relatorio.html
│ ├── categorias.html
│ ├── categorias_adicionar.html
│ └── 404.html
├── config.py # Configurações de desenvolvimento e produção
├── run.py # Ponto de entrada
├── requirements.txt
└── Procfile
| Método | URL | Descrição |
|---|---|---|
| GET | / |
Lista transações (aceita ?tipo=receita|despesa) |
| GET / POST | /adicionar |
Nova transação |
| GET / POST | /editar/<id> |
Editar transação |
| POST | /deletar/<id> |
Excluir transação |
| GET | /relatorio |
Resumo financeiro + gráfico |
| GET | /categorias |
Listar categorias |
| GET / POST | /categorias/adicionar |
Nova categoria |
| POST | /categorias/deletar/<id> |
Excluir categoria |
- Python 3.10+
- MySQL rodando localmente
git clone <url-do-repositorio>
cd finance_app
python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
pip install -r requirements.txtCREATE DATABASE finance_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;Por padrão a app conecta em root:04072003@localhost:3306/finance_app. Para sobrescrever sem alterar o código:
export DATABASE_URL="mysql+pymysql://<usuario>:<senha>@localhost:3306/finance_app"
export SECRET_KEY="sua-chave-secreta"python run.pyAcesse http://localhost:5000. As tabelas são criadas e as 20 categorias padrão são inseridas automaticamente na primeira execução.
| Variável | Padrão | Descrição |
|---|---|---|
DATABASE_URL |
mysql+pymysql://root:SUA_SENHA@localhost:3306/finance_app |
URI de conexão com o MySQL |
SECRET_KEY |
troque-esta-chave-em-producao |
Chave para assinatura de sessões Flask |
PORT |
5000 |
Porta HTTP (usado pelo run.py) |
Atenção: nunca suba credenciais reais no controle de versão. Em produção, use sempre variáveis de ambiente.