Sistema Web com Python

python
3 – Web
3.1 – Backend (servidor)
3.2 – Frontend (transpilado)
3.3 – APIs
3.4 – Templates (Jinja2, Django Templates)
3.1.1 – Sincrono (Django, Flask, FastAPI)
3.1.2 – Assincrono (FastAPI, Sanic, Aiohttp)
3.1.3 – WebSockets (Socket.IO, WebSockets)
3.2.1 – PyScript (roda Python no navegador)
3.2.2 – Brython
3.2.3 – Transcrypt
3.3.1 – REST (requests, Django REST Framework)
3.3.2 – GraphQL (Graphene)
LEGENDA
Nivel_1
Nivel_2
Nivel_3

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.

Criar Instaladores em Python

python
0 – Python
2 – Distribuicao e Empacotamento
2.1 – Criar Executaveis
2.3 – Multiplataforma
2.2 – Criar Instaladores
LEGENDA
Nivel_1
Nivel_2
Nivel_3

Um instalador é um programa que configura seu software no computador do usuário. Ele copia arquivos, cria atalhos e registra o aplicativo no sistema. Primeiramente, instaladores são essenciais para usuários finais não técnicos. Eles não precisam saber sobre Python, pip ou dependências. Além disso, instaladores podem adicionar entradas no menu iniciar ou na área de trabalho. A voz passiva é usada aqui: “o registro do Windows é modificado automaticamente”. Quando utilizar instaladores? Em aplicações desktop profissionais. Por exemplo, um sistema de vendas, um jogo ou uma ferramenta interna. Ferramentas como Inno Setup, NSIS e cx_Freeze com bdist_msi são populares. Neste guia, focaremos no Inno Setup (Windows) e no pkgbuild (macOS). Para Linux, usamos pacotes .deb ou .rpm (gerenciadores nativos). Vamos explorar cada cenário com exemplos práticos.

Inno setup: instalador profissional para windows

Inno Setup é gratuito, maduro e suporta muitos recursos. Ele cria um único arquivo .exe que instala seu programa. Primeiro, gere um executável Python com PyInstaller (veja post anterior). Depois, escreva um script .iss para o Inno Setup. Esse script define onde copiar os arquivos e quais atalhos criar. A compilação gera o instalador final. Foi observado que o Inno Setup permite scripts Pascal personalizados. Isso é útil para validar dependências ou ler o registro do Windows. Um exemplo mínimo de script .iss:

Para compilar, use o compilador do Inno Setup (Compil32.exe). O resultado é um instalador profissional e assinável digitalmente. A voz passiva é aplicada: “os atalhos são criados automaticamente”.

Instaladores no macOS e linux

No macOS, usamos o pkgbuild ou productbuild (linha de comando). Primeiro, crie uma estrutura de diretórios com seu aplicativo. Coloque o executável em MyApp.app/Contents/MacOS/. Depois, execute pkgbuild --root MyApp.app --identifier com.empresa.meuapp --version 1.0 MeuApp.pkg. Isso gera um instalador .pkg que o usuário pode clicar e instalar. Para Linux, o padrão são pacotes .deb (Debian/Ubuntu). Use a ferramenta dpkg-deb ou o fpm (gerador universal). Um pacote .deb requer uma pasta DEBIAN/control com metadados. Exemplo mínimo de estrutura:

Depois, execute: dpkg-deb --build meuapp_deb. Isso cria meuapp_deb.deb para instalação com sudo dpkg -i. Quando usar cada formato? No macOS, .pkg para distribuição externa. No Linux, .deb (Debian/Ubuntu) ou .rpm (Fedora/RHEL).

Ferramentas universais e boas práticas

O fpm (Effing Package Management) cria instaladores para vários sistemas. Instale com gem install fpm (requer Ruby). Exemplo: fpm -s dir -t deb -n meuapp -v 1.0 --prefix /usr/local/bin meuapp. Isso gera um .deb sem esforço. Outra opção é o NSIS (Nullsoft Scriptable Install System). Ele é mais leve que o Inno Setup e também muito popular. A escolha depende da sua familiaridade e dos recursos necessários. Nunca distribua apenas uma pasta .exe sem instalador para leigos. Eles esperam um processo guiado com próximos e confirmar. A fórmula da taxa de adoção: \(A = \frac{I_{\text{instalador}}}{I_{\text{zip}}} \approx 2.5\). Usuários instalam 2,5 vezes mais com um instalador do que com um ZIP. Portanto, invista tempo nessa etapa final. Teste seu instalador em uma máquina limpa (máquina virtual). Verifique se todas as dependências (VC++ Runtime, etc.) são incluídas. Por fim, ofereça desinstalação fácil via painel de controle. Isso demonstra profissionalismo e respeito ao usuário. Com essas ferramentas, seu software estará pronto para o mundo real.