Backend com Python

python

O backend é a parte invisível de um sistema web. Ele processa dados, gerencia usuários e responde a requisições. Primeiramente, o backend não exibe telas diretamente. Em vez disso, ele fornece APIs ou renderiza HTML no servidor. Por exemplo, quando você faz login, o backend verifica sua senha. Além disso, ele consulta bancos de dados e aplica regras de negócio. A voz passiva é usada aqui: “as decisões críticas são tomadas no backend”. Quando utilizar um servidor Python? Em praticamente toda aplicação web moderna. Python é famoso por sua clareza e ecossistema maduro. Frameworks como Django, Flask e FastAPI dominam o mercado. Cada um tem características específicas para diferentes necessidades. Neste guia, exploraremos os conceitos fundamentais do backend. Vamos desde o servidor HTTP até a lógica de negócio. Preparado? Então comece sua jornada nos bastidores da web.

Servidores wsgi e asgi: a base do backend python

Um servidor web Python precisa de uma interface padronizada. WSGI (Web Server Gateway Interface) é o padrão clássico. Ele conecta o servidor (como Nginx) à sua aplicação Flask ou Django. Exemplos de servidores WSGI são Gunicorn e uWSGI. Por outro lado, ASGI (Asynchronous Server Gateway Interface) é mais novo. Ele suporta requisições assíncronas e WebSockets. FastAPI e Django 3+ rodam sobre ASGI com eficiência. Quando usar WSGI? Em aplicações síncronas tradicionais. Já o ASGI é melhor para chat, notificações ou streaming. A escolha impacta a performance e a complexidade do código. Servidores WSGI tratam uma requisição por vez por processo. Servidores ASGI podem lidar com muitas conexões simultâneas. Portanto, avalie seu caso antes de decidir. Um exemplo de execução com Gunicorn seria:

No comando, -w 4 significa quatro processos de trabalho. Isso melhora a capacidade de resposta sob carga. Nunca use o servidor embutido do Flask em produção. Ele é inseguro e lento para múltiplos usuários simultâneos.

Rotas, middlewares e injeção de dependências

Rotas definem quais URLs ativam quais funções. Um middleware intercepta requisições antes da lógica principal. Por exemplo, autenticação, logging ou compressão de resposta. Em Flask, middlewares são criados com decoradores ou funções específicas. Em Django, eles são classes configuráveis no settings.py. Já a injeção de dependências facilita o teste de componentes isolados. FastAPI tem suporte nativo a dependências via Depends(). Isso evita acoplamento rígido entre partes do sistema. Quando usar middlewares? Sempre que houver lógica transversal. Log de requisições, cache e cabeçalhos de segurança são exemplos. A voz passiva é aplicada: “as dependências são resolvidas automaticamente”. Um exemplo prático com middleware simples em Flask:

Esse código mede o tempo de cada requisição automaticamente. O middleware before_request roda antes da view. O after_request roda depois, podendo modificar a resposta. Isso é poderoso para monitoramento e auditoria.

Lógica de negócio e camada de serviços

A lógica de negócio é o coração do seu backend. Ela implementa regras como “usuário só pode comprar se tiver saldo”. Essa lógica não deve ficar dentro das rotas ou controladores. Em vez disso, crie uma camada de serviços separada. Cada serviço é uma classe ou conjunto de funções puras. Elas recebem dados, processam e retornam resultados. Isso facilita testes unitários e reutilização de código. Por exemplo, um serviço de cálculo de imposto pode ser usado em várias rotas. Quando usar essa separação? Em qualquer projeto com mais de dez rotas. A fórmula da complexidade ciclomática sugere: \(M = E – N + 2P\). Onde E são arestas, N nós, P componentes conexos. Manter a lógica isolada reduz esse número e a manutenção. Veja um exemplo de serviço financeiro simples:

Note como a lógica de negócio está isolada na classe. A rota apenas orquestra a chamada e trata erros. Isso permite testar o cálculo sem precisar do Flask. Para testar, basta assert CalculadoraImposto.calcular(100) == 10.0. Essa arquitetura é chamada de “service layer” ou camada de serviços. Ela escala bem para equipes grandes e código de longo prazo. Por fim, lembre-se: o backend Python é poderoso e flexível. Comece simples, adicione middlewares e serviços gradualmente. Seu sistema crescerá de forma organizada e sustentável.

Sistema Web com Python

python

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.

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.

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.