Visão Geral
1- O usuário interage com as telas HTML
2- O formulário envia uma requisição HTTP (POST ou GET) para as rotas do
Python no app.py
3- O app.py executa comandos SQL no banco de dados
4- O banco responde, o app.py processa os dados e renderiza o HTML
atualizado de volta para o usuário
Back-end – Baseado nos links, formulários e variáveis dos templates HTML
@app.route – decorator – mapeia uma URL do navegador para uma função
específica do Python no back-end
1- Gerencia a homepage e renderiza três blocos de dados usando queries
com JOIN
a. Query_boletim – INNER JOIN com ENTREGAS, ALUNOS,
ATIVIDADES e DISCIPLINAS – as mais recentes primeiro
b. Query_desempenho – AVG(Entregas.nota_obtida) com GROUP
BY Atividades.id – Média das notas para cada atividade
c. Query_risco – Alunos com nota menor que 6
d. Query_inadimplentes – subconsulta (NOT IN(SELECT DISTINCT
aluno_id FROM…)) – alunos sem nota lançada
2- Controla o arquivo alunos.html
a. Cadastro/Matrícula (POST /alunos): recebe os dados
b. Edição (GET e POST /alunos/editar/<id>): edita um aluno
c. Exclusão (GET ou POST /alunos/deletar/<id>): remove um aluno
do banco de dados
3- Controla o arquivo disciplinas.html
a. Salva e edita matérias validando restrições
4- Controla o arquivo matriculas.html
a. Cria a relação de muitos para muitos entre alunos e disciplinas.
O app.py permite vincular um ID ao outro
5- Controla atividades.html
a. Registra avaliações vinculadas a uma disciplina
6- Controla notas.html
a. Vincula o aluno à atividade e registra a nota, data de lançamento
e observações
Filtro Jinja2 formata as notas para o padrão brasileiro antes de exibir na tela
Os arquivos SQL:
•
criacao_banco.sql: Contém as instruções CREATE TABLE para montar o
banco de dados. Ele cria as tabelas de alunos, disciplinas, matriculas...,
definindo as chaves primárias e estrangeiras que conectam o sistema.
•
insercao_dados.sql: Contém comandos INSERT INTO para popular o
banco de dados com dados de teste.
•
limpeza_dados.sql: Contém comandos DELETE FROM ou DROP TABLE
para resetar o banco de dados se necessário.
•
query_exists.sql e query_any.sql: São scripts de consultas avançadas. O
query_exists.sql é usado para verificar se um aluno já está matriculado em
uma disciplina antes de inseri-lo, ou para gerar a lista de alunos sem
atividades. O query_any.sql faz subconsultas comparativas.
app.py
get_db_connection – Toda vez que uma página precisa de dados, essa
função é chamada para abrir um canal com o MySQL rodando no localhost na
base trabalho_db. O uso do dictionary=TRUE nos cursores
(conn.cursor(dictionary=TRUE)) permite que os dados retornados venham
estruturados e organizados, o que facilita o envio para as páginas HTML
if request.method ==’POST’ – entra na condição
request.form[‘nome_do_campo’] – captura as variáveis
executa INSERT INTO e depois conn.commit() para gravar as alterações e dá
redirect para limpar a tela e evitar o reenvio de dados
A última linha configura o Flask para reiniciar o código automaticamente se salvar
modificações