Esqueleto com autenticação, RBAC (admin/professor/convidado), telas iniciais de Admin (Alunos e criação de Grupos) e configuração por DATABASE_URL ou variáveis DB_* (auto-build).
- Flask + Jinja2 templates
- SQLAlchemy + Flask-Migrate
- Flask-Login, Flask-WTF, Flask-Bcrypt, python-dotenv
- MySQL (via
mysql+pymysql) com fallback SQLite (dev) - openpyxl (export Excel — demo)
- Crie o venv e instale:
python -m venv .venv
# Windows (CMD): .venv\Scripts\activate
# PowerShell: .venv\Scripts\Activate.ps1
# Linux/macOS: source .venv/bin/activate
pip install -r requirements.txt- Crie
.env(base em.env.example). Use uma opção:
DATABASE_URL=mysql+pymysql://tgi:SUA_SENHA@127.0.0.1:3306/tgi_db?charset=utf8mb4
DB_DIALECT=mysql
DB_DRIVER=pymysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=tgi_db
DB_USER=tgi
DB_PASS=sua_senha#com@caracteres:especiais
- Migrações:
flask db init
flask db migrate -m "initial"
flask db upgrade- Crie um admin:
flask create-user --email admin@tgi.edu --password 123456 --name "Admin" --role admin- Rode:
flask runAcesse: http://127.0.0.1:5000/login
/admin/— dashboard admin (+ atalhos para Alunos e Criar Grupo)/admin/students— listar alunos/admin/students/new— novo aluno/admin/groups/new— criar grupo por RGMs/admin/export/excel— export demo xlsx
- Tabela de grupos usa nome tgi_groups (evita conflito com palavra reservada).
- Se ver “Forbidden”, garanta que o usuário tem
role=admin. No shell:
from app.models import User, Role
from app.extensions import db
u = User.query.filter_by(email="admin@tgi.edu").first()
u.role = Role.admin
db.session.commit()