UNIVERSIDADE PITÁGORAS UNOPAR AN
ANÁLISE E DESENVOLVIMENTO DE
SISTEMAS
NOME DA DISCIPLINA: FRAMEWORK PARA
DESENVOLVIMENTO DE SOFTWARE Unidade:
U4 - FRAMEWORKS PARA
DESENVOLVIMENTO DESTINADO PARA
SERVIDORES Aula: A4 - FRAMEWORK
PYTHON
Simone Pereira Mattos
Matrícula: 2024029895
Sumário
1. Software
2. Estrutura do projeto
3. Passo a passo detalhado (com comandos)
4. Código-fonte completo ([Link], templates)
5. Explicação linha a linha do código
6. Como testar
7. Tratamento de erros e validações
8. Respostas às perguntas de reflexão
9. Checklist
10. Sugestões de melhorias
1. Requisitos
Python 3.8+ (recomendo 3.10 ou 3.11).
Verifique com python --version.
VS Code (ou outro editor: Sublime,
PyCharm, Notepad++). Vou usar VS Code
nas instruções.
Navegador (Chrome, Edge, Firefox) para
testar a aplicação.
2. Estrutura do projeto
Criei uma pasta chamada
calculadora_salario_flask com a seguinte
estrutura:
calculadora_salario_flask/
├─ venv/ # ambiente virtual
├─ [Link] # aplicação Flask
├─ templates/
│ ├─ [Link]
│ └─ [Link]
3. Passo a passo bem detalhado com os
comandos utilizados
1. Criar pasta e entrar nela
No terminal / PowerShell / Bash:
mkdir calculadora_salario_flask
cd calculadora_salario_flask
2. Criar e ativar o ambiente virtual
Windows (PowerShell):
python -m venv venv
venv\Scripts\Activate.ps1
3. Instalar o Flask
pip install Flask
4. Criar arquivos
Criei [Link] na raiz do projeto e a pasta templates/ com
[Link] e [Link].
5. Executar a aplicação
python [Link]
4. Código-fonte completo
Observação: o código abaixo já implementa validações
básicas (número inválido, negativo), aceita casas decimais
usando vírgula ou ponto e mostra um resultado com
discriminação dos valores.
[Link]
from flask import Flask, render_template, request
app = Flask(__name__)
# Função auxiliar para formatar em real (ex.: 1.234,56)
def format_currency(value):
return f"R$ {value:,.2f}".replace(',', 'X').replace('.',
',').replace('X', '.')
@[Link]('/')
def index():
return render_template('[Link]')
@[Link]('/resultado', methods=['POST'])
def resultado():
# Recebe os valores do formulário
salario_raw = [Link]('salario', '').strip()
dependentes_raw = [Link]('dependentes', '').strip()
# Permitir que usuário use vírgula como separador decimal
salario_raw = salario_raw.replace(',', '.')
# Validação e conversão
try:
salario = float(salario_raw)
except ValueError:
return render_template('[Link]', error='Salário
inválido. Use apenas números (ex.: 2500 ou 2.500,00).')
try:
dependentes = int(dependentes_raw)
except ValueError:
return render_template('[Link]', error='Número de
dependentes inválido. Use um número inteiro.')
if salario < 0:
return render_template('[Link]', error='Salário não
pode ser negativo.')
if dependentes < 0:
return render_template('[Link]', error='Número de
dependentes não pode ser negativo.')
# Regras de negócio (fixas conforme enunciado)
inss = salario * 0.08
ir = salario * 0.15 if salario > 2500.0 else 0.0
desconto_dependentes = dependentes * 200.0
salario_liquido = salario - inss - ir + desconto_dependentes
return render_template('[Link]',
salario=salario,
dependentes=dependentes,
inss=inss,
ir=ir,
desconto_dependentes=desconto_dependentes,
salario_liquido=salario_liquido,
format_currency=format_currency)
if __name__ == '__main__':
[Link](debug=True)
templates/[Link]
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<title>Resultado</title>
</head>
<body>
<h2>Resultado</h2>
{% if error %}
<p style="color:red">{{ error }}</p>
<a href="/">Voltar</a>
{% else %}
<ul>
<li>Salário bruto: {{ format_currency(salario) }}</li>
<li>INSS (8%): {{ format_currency(inss) }}</li>
<li>IR (15% se > 2.500,00): {{ format_currency(ir) }}</li>
<li>Desconto por dependentes (R$200 x {{ dependentes }}):
{{ format_currency(desconto_dependentes) }}</li>
<li><strong>Salário líquido:
{{ format_currency(salario_liquido) }}</strong></li>
</ul>
<a href="/">Calcular outro</a>
{% endif %}
</body>
</html>
5. Explicação linha a linha
app = Flask(__name__) — cria a aplicação Flask.
format_currency — converte número float para
formato brasileiro (milhares com ponto, decimais com
vírgula).
@[Link]('/') — rota para o formulário (GET).
@[Link]('/resultado', methods=['POST']) —
rota que processa o formulário.
Conversão de entrada: salario_raw.replace(',', '.')
permite que o usuário use vírgula.
Validações: irá checar se o salário e dependentes são
números e não-negativos.
Regras de cálculo: INSS = 8% * salário; IR = 15% *
salário somente se salário > 2500.0; desconto por
dependente = 200 * número de dependentes.
Resultado: salario_liquido = salario - inss - ir +
desconto_dependentes.
6. Testes e resultados observados
Abaixo deixo a tabela com os testes requeridos,
com os cálculos detalhados.
Tabela de Testes
Salário Bruto Dependentes Resultado
3000,00 2 2710,00
2000,00 1 2040,00
1000,00 0 920,00
-500,00 1 Erro
abc 2 Erro
2500 -1 Erro
Cálculos (passo a passo)
Teste 1 — 3000,00; 2 dependentes
o INSS = 0,08 * 3000,00 = 240,00
o IR = 0,15 * 3000,00 = 450,00
(porque > 2.500,00)
o Desconto dependentes = 2 * 200,00
= 400,00
o Salário líquido = 3000,00 - 240,00 -
450,00 + 400,00 = 2.710,00
Teste 2 — 2000,00; 1 dependente
o INSS = 0,08 * 2000,00 = 160,00
o IR = 0,00 (salário <= 2.500,00)
o Desconto dependentes = 1 * 200,00
= 200,00
Salário líquido = 2000,00 - 160,00 -
0,00 + 200,00 = 2.040,00
Teste 3 — 1000,00; 0 dependente
INSS = 0,08 * 1000,00 = 80,00
IR = 0,00
Desconto dependentes = 0
Salário líquido = 1000,00 - 80,00 - 0 + 0 =
920,00
Teste 4 — -500,00; 1 dependente
Salário negativo -> Erro (deve ser tratado
no backend)
Teste 5 — 'abc'; 2 dependentes
Salário não numérico -> Erro (entrada
inválida)
Teste 6 — 2500; -1 dependentes
Dependentes negativo -> Erro
7. Tratamento de erros e validações
Por que validar no backend?
o Cliente (JavaScript) pode ser
facilmente burlado; validação
apenas no front-end não é segura.
o Backend garante consistência dos
dados e evita exceções e estados
inválidos na lógica de negócio.
o Facilita o logging e auditoria
(registrar entradas inválidas para
posterior correção).
Validações implementadas no
exemplo:
o Salário deve ser float numérico.
o Dependentes devem ser inteiro.
o Ambos devem ser >= 0.
o Permitir vírgula como separador
decimal para usabilidade.
8. Respostas às perguntas propostas
1. Com base nos seus conhecimentos, qual a
vantagem de validar os dados do formulário no
backend? Justifique.
A validação de dados no backend garante segurança e
integridade da aplicação. Embora validações no
cliente melhorem a experiência do usuário evitando
envios óbvios, apenas a validação no frontend deixa a
aplicação vulnerável a entradas maliciosas (ex.:
requests forjados) e erros que podem quebrar a lógica
de negócio. No backend podemos aplicar regras
centrais, registrar tentativas de entrada inválida,
uniformizar mensagens de erro e prevenir exceções
não tratadas. Em resumo: o backend é a última linha
de defesa e garante que os dados armazenados e
processados sejam sempre válidos.
2. Considerando que o salário líquido depende de
várias variáveis (IR, INSS, dependentes), o que
seria mais indicado para facilitar futuras
atualizações da regra de cálculo? Reflita sobre sua
resposta.
Para facilitar mudanças futuras, é recomendável
separar a regra de negócio (cálculo do salário) da
camada de apresentação (templates) e das rotas.
Criar um módulo ou função dedicada — por exemplo,
salario_calculos.py com
calcular_salario_liquido(salario,
dependentes, regras) — torna a manutenção mais
simples e testável. Além disso, centralizar as
constantes (alíquotas, valores por dependente, limites)
em um arquivo de configuração ou em variáveis de
ambiente facilita alterar valores sem tocar várias
partes do código.
Conclusão
Com este experimento, foi possível construir uma aplicação
web funcional utilizando o Flask em Python. Foram aplicadas
regras de negócio simplificadas, criadas interfaces com
HTML e tratados erros de entrada. A prática reforçou a
importância de separar a lógica de negócio da apresentação e
mostrou como frameworks podem agilizar o
desenvolvimento de aplicações robustas e organizadas.
Referências
Pallets Projects. Flask Documentation. Disponível em:
[Link]