Um sistema web roda em um servidor remoto. O usuário acessa via navegador com requisições HTTP. Python é excelente para construir o back-end desses sistemas. Existem frameworks maduros como Django e Flask. Cada um atende a diferentes necessidades de projeto. Django entrega uma estrutura completa e pronta. Flask oferece simplicidade e controle direto. A escolha depende da complexidade esperada. Sistemas pequenos se beneficiam da leveza do Flask. Grandes portais corporativos usam Django pela segurança. Esta decisão impacta todo o ciclo de vida do software.
Rotas, views e templates organizados
Uma rota associa uma URL a uma função chamada view.
A view processa a requisição e retorna uma resposta.
Respostas comuns incluem HTML, JSON ou redirecionamentos.
O Flask usa decoradores para declarar rotas facilmente.
Exemplo: @app.route('/contato') define o endereço.
Parâmetros dinâmicos vêm da própria URL.
/usuario/ captura um número como argumento.
Templates separam a apresentação da lógica de negócio.
O Jinja2 insere dados com {{ variavel }}.
Estruturas condicionais usam {% if %} dentro do template.
Isso mantém o código Python limpo e focado.
Um exemplo funcional mínimo é mostrado abaixo.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') def home(): return render_template('index.html', titulo='Início') @app.route('/eco', methods=['POST']) def eco(): texto = request.form.get('msg', '') return f'Você enviou: {texto}' if __name__ == '__main__': app.run(debug=True) |
Salve o código como webapp.py.
Crie uma pasta templates com index.html.
Execute com Python e acesse http://localhost:5000.
O servidor de desenvolvimento é ótimo para testes locais.
Nunca o use diretamente em produção, pois é inseguro.
Banco de dados e modelos ORM
Sistemas web precisam armazenar dados persistentemente.
Bancos como SQLite, PostgreSQL ou MySQL resolvem isso.
O SQLAlchemy é o ORM mais popular do ecossistema Python.
Ele converte classes Python em tabelas de banco relacional.
Cada atributo de classe vira uma coluna na tabela.
Operações como inserir ou buscar usam métodos simples.
Exemplo: db.session.add(objeto) prepara a inserção.
db.session.commit() confirma a transação no banco.
Consultas usam a sintaxe Modelo.query.filter_by().
Isso elimina SQL escrito manualmente, prevenindo injeção.
A configuração inicial exige apenas a URI do banco.
Veja um modelo concreto de usuário com SQLAlchemy.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app) class Produto(db.Model): id = db.Column(db.Integer, primary_key=True) nome = db.Column(db.String(100), nullable=False) preco = db.Column(db.Float, nullable=False) # Criar tabelas (execute uma vez) with app.app_context(): db.create_all() # Inserir um produto p = Produto(nome='Caneta', preco=1.99) db.session.add(p) db.session.commit() # Buscar todos os produtos todos = Produto.query.all() |
Esse padrão funciona para qualquer sistema web. A camada de dados fica desacoplada do resto da aplicação. Testes se tornam mais fáceis com um banco em memória. Para produção, troque a URI para PostgreSQL ou similar.
Autenticação e implantação final
Autenticação restringe acesso a certas áreas do sistema.
O Django já entrega esse mecanismo de fábrica.
No Flask, a extensão Flask-Login é a mais adotada.
Senhas nunca são armazenadas em texto puro.
Use bcrypt para gerar hashes seguros e salgados.
A fórmula de hash é \(H = \text{bcrypt}(senha + salt)\).
Cookies de sessão recebem assinatura criptográfica.
Isso impede que usuários forjem sua identidade.
Após pronta, a aplicação precisa ser publicada na internet.
Plataformas como Render, PythonAnywhere ou DigitalOcean funcionam.
Gere um arquivo requirements.txt com pip freeze.
Configure um servidor WSGI como Gunicorn no ambiente final.
Variáveis sensíveis (chaves, senhas) ficam em variáveis de ambiente.
Nunca as escreva diretamente no código-fonte.
Com esses passos, seu sistema web estará seguro e funcional.