Projeto de exemplo que implementa uma API REST simples para uma padaria, com modelos SQLAlchemy, validações, uma GUI Tkinter opcional e um notebook com exemplos de chamadas à API.
Resumo rápido
- API Flask em
/apicom recursos paraproducts,customerseorders. - Banco SQLite local:
padaria.db(ignorado no repositório via.gitignore).
- Python 3.8+
git(para versionamento)- (opcional) Vagrant + VirtualBox para provisionamento automático
Abra um terminal na pasta do projeto (~/Documentos/Pav) e execute:
# criar e ativar ambiente virtual
python3 -m venv venv
source venv/bin/activate
# atualizar pip e instalar dependências
pip install --upgrade pip
pip install -r requirements.txtSe não existir requirements.txt, instale manualmente:
pip install flask flask-restful flask-sqlalchemy requests sqlalchemyCom o venv ativado, execute:
python app.pyIsso cria as tabelas (via Base.metadata.create_all) e inicia o servidor de
desenvolvimento em http://127.0.0.1:5000.
Para rodar em background e salvar logs:
nohup venv/bin/python app.py > flask.log 2>&1 &
tail -f flask.logSe a porta 5000 já estiver em uso, mate o processo ou altere a porta:
# matar processo na porta 5000
fuser -k 5000/tcp
# ou alterar porta diretamente em app.py: app.run(port=5001)Se quiser usar a interface Tkinter (arquivo gui/padaria_gui.py):
source venv/bin/activate
python gui/padaria_gui.py > gui.log 2>&1 &
tail -f gui.logObs.: a GUI usa display gráfico. Em Vagrant a provision script já configura VNC.
O notebook com exemplos de requisições está em notebooks/demo_api.ipynb.
Abra com:
source venv/bin/activate
jupyter notebook notebooks/demo_api.ipynbGET /api/products— lista produtosPOST /api/products— cria produto (veja cabeçalhoX-API-KEYno notebook)GET /api/products/<id>— obter produtoPUT /api/products/<id>— atualizar produtoDELETE /api/products/<id>— remover (soft-delete)GET/POST /api/customers— gerenciar clientesGET/POST /api/orders— criar/consultar pedidos
padaria.dbestá no .gitignore para não subir o banco ao Git.- Atualmente o projeto retorna instâncias ORM em alguns controllers — é recomendado serializar (transformar em dict/JSON) antes de fechar a sessão.
- Ajustei
db.pyparaexpire_on_commit=Falsepara evitar erros de instância desanexada; para produção use um WSGI server (gunicorn/uvicorn) e revise a gestão de sessão/serialização.
Existe um Vagrantfile e provision.sh que instalam dependências, criam o
venv e iniciam a API + GUI automaticamente. Para usar:
vagrant upApós provisionamento, a API deve ficar disponível em http://127.0.0.1:5000.
- Já há um
.gitignorepreparado. Para subir ao GitHub:
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/SEU_USUARIO/NOME_DO_REPO.git
git push -u origin main- Erro: porta 5000 ocupada — mate o processo ou altere a porta.
- Erro: permissão ao criar arquivos — verifique permissões da pasta e venv.