Python para Web: Flask, Django e Aplicações Práticas
Python se consolidou como uma das linguagens mais versáteis para desenvolvimento web. Com frameworks maduros como Flask e Django, é possível criar desde APIs simples até aplicações corporativas complexas. Neste guia completo, você vai aprender os fundamentos de cada framework, como construir APIs REST, integrar bancos de dados e colocar sua aplicação no ar.
1. Introdução ao Flask: rotas, templates e sessões
Flask é um microframework em Python que oferece o essencial para começar uma aplicação web. Sua filosofia minimalista permite que você adicione apenas os componentes necessários, tornando o aprendizado mais direto.
Rotas no Flask
Uma rota é um decorador que associa uma URL a uma função. Veja o exemplo mais simples:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return '<h1>Olá, Flask!</h1>'
if __name__ == '__main__':
app.run(debug=True)
Ao acessar http://127.0.0.1:5000/, a função home é executada e retorna o HTML. Você pode criar rotas dinâmicas usando <variavel> no caminho.
Templates com Jinja2
Flask utiliza o motor de templates Jinja2 para separar a lógica da apresentação. Crie um arquivo templates/index.html e renderize com variáveis:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html', nome='Mundo')
<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head><title>Flask App</title></head>
<body>
<h1>Olá, {{ nome }}!</h1>
</body>
</html>
Jinja2 suporta condicionais, laços e herança de templates, permitindo criar páginas dinâmicas com facilidade.
Sessões
Para manter dados entre requisições, o Flask oferece sessões baseadas em cookies assinados. Exemplo:
from flask import Flask, session, redirect, url_for, request
app = Flask(__name__)
app.secret_key = 'sua-chave-secreta'
@app.route('/login')
def login():
session['usuario'] = request.args.get('nome')
return redirect(url_for('home'))
@app.route('/')
def home():
if 'usuario' in session:
return f'Logado como {session["usuario"]}'
return 'Você não está logado.'
2. Introdução ao Django: MVT, Admin e ORM
Django é um framework completo que segue o padrão Model-View-Template (MVT). Ele inclui baterias como ORM, painel admin e autenticação, acelerando o desenvolvimento de aplicações mais robustas.
Estrutura MVT
No Django, o Model representa os dados, a View contém a lógica de negócio (similar ao controller), e o Template é a apresentação. Exemplo de um model:
from django.db import models
class Produto(models.Model):
nome = models.CharField(max_length=100)
preco = models.DecimalField(max_digits=8, decimal_places=2)
estoque = models.IntegerField(default=0)
def __str__(self):
return self.nome
Painel Admin
Uma das grandes vantagens do Django é o admin automático. Basta registrar o model no admin.py:
from django.contrib import admin
from .models import Produto
admin.site.register(Produto)
Assim você ganha uma interface completa para gerenciar os dados da aplicação sem escrever uma linha de HTML.
ORM (Object-Relational Mapping)
O ORM do Django permite trabalhar com banco de dados usando Python puro. Exemplos:
# Criar um produto
produto = Produto(nome='Curso de Python', preco=97.00, estoque=10)
produto.save()
# Buscar todos os produtos com preco maior que 50
Produto.objects.filter(preco__gt=50)
# Atualizar
produto.preco = 87.00
produto.save()
3. Flask vs Django: qual escolher?
A escolha entre Flask e Django depende do tamanho e complexidade do seu projeto. Veja uma comparação direta:
| Característica | Flask | Django |
|---|---|---|
| Tamanho do framework | Micro, leve | Completo, pesado |
| Curva de aprendizado | Suave | Moderada a alta |
| ORM integrado | Não (usa extensões) | Sim (poderoso) |
| Admin automático | Não | Sim |
| Flexibilidade | Alta (escolha seus componentes) | Média (convenção sobre configuração) |
| Ideal para | APIs, microsserviços, protótipos | Aplicações grandes, portais, e-commerce |
Se você prefere um framework mais leve e deseja liberdade de escolha, Flask é uma excelente opção. Se precisa de uma solução all-in-one com recursos nativos, Django é mais produtivo em projetos maiores.
No ecossistema brasileiro, ambos têm forte adoção. Para quem está migrando do PHP, vale a pena conferir também nosso comparativo de PHP e Laravel.
4. Construção de API REST com Python
APIs REST são fundamentais para comunicação entre sistemas. Python oferece ferramentas excelentes para criá-las, tanto com Flask quanto com Django REST Framework (DRF).
API com Flask
from flask import Flask, jsonify, request
app = Flask(__name__)
produtos = [{'id': 1, 'nome': 'Notebook', 'preco': 3500.00}]
@app.route('/api/produtos', methods=['GET'])
def listar():
return jsonify(produtos)
@app.route('/api/produtos', methods=['POST'])
def criar():
data = request.get_json()
novo = {'id': len(produtos)+1, **data}
produtos.append(novo)
return jsonify(novo), 201
API com Django REST Framework
# serializers.py
from rest_framework import serializers
from .models import Produto
class ProdutoSerializer(serializers.ModelSerializer):
class Meta:
model = Produto
fields = '__all__'
# views.py
from rest_framework import viewsets
from .models import Produto
from .serializers import ProdutoSerializer
class ProdutoViewSet(viewsets.ModelViewSet):
queryset = Produto.objects.all()
serializer_class = ProdutoSerializer
O DRF fornece viewsets, serializers e autenticação prontos, agilizando a criação de APIs completas com pouco código.
5. Integração com banco de dados
Seja com Flask ou Django, a integração com banco de dados é essencial. Enquanto o Django já vem com ORM próprio, no Flask você pode usar SQLAlchemy, a biblioteca mais popular para mapeamento objeto-relacional em Python.
Flask + SQLAlchemy
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///meuapp.db'
db = SQLAlchemy(app)
class Usuario(db.Model):
id = db.Column(db.Integer, primary_key=True)
nome = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return f'<Usuario {self.nome}>'
Com o SQLAlchemy, você pode migrar entre SQLite, PostgreSQL, MySQL e outros sem alterar o código da aplicação.
Lembre-se de ter uma base sólida em HTML e CSS e JavaScript moderno para construir o front-end que consome essas APIs.
6. Deploy básico de aplicações Python
Colocar sua aplicação no ar é o próximo passo. Existem diversas opções gratuitas e pagas para hospedar apps Python:
- Heroku: antigo favorito, mas com plano gratuito descontinuado. Ainda funcional para testes com cartão de crédito.
- PythonAnywhere: ideal para iniciantes, oferece um plano gratuito com domínio próprio.
- Railway / Render: plataformas modernas com suporte nativo a Python, banco de dados integrado e deploy contínuo via Git.
- VPS (DigitalOcean, Linode): para maior controle, você pode configurar um servidor Nginx + Gunicorn + supervisor.
Um exemplo básico de deploy usando Gunicorn e Nginx em uma VPS:
# Instalar dependências
pip install gunicorn
# Rodar a aplicação Flask
gunicorn -w 4 app:app
# Configurar Nginx como proxy reverso
# server { listen 80; location / { proxy_pass http://127.0.0.1:8000; } }
Para Django, o processo é similar, mas com coleta de arquivos estáticos e configuração de ALLOWED_HOSTS.
Perguntas Frequentes (FAQ)
Python é bom para desenvolvimento web?
Sim, Python é excelente para web, especialmente com frameworks como Flask e Django que abstraem grande parte da complexidade e permitem desenvolvimento rápido.
Devo aprender Flask ou Django primeiro?
Se você está começando, Flask é mais simples e permite entender os fundamentos. Django é mais indicado quando você já conhece o básico e quer construir algo maior.
Qual banco de dados usar com Python?
Os mais comuns são PostgreSQL (recomendado para produção) e SQLite (para desenvolvimento/pequenos projetos). MySQL também é suportado via ORM.
Preciso saber JavaScript para desenvolver com Python web?
Depende. Se for construir uma API e um front-end separado, sim, é importante ter conhecimentos de JavaScript moderno e consumo de APIs REST.
Onde posso aprender mais?
Explore nossa seção de todas as tecnologias e também os estudos de programação com exercícios práticos.
Conclusão
Python para web é um campo vasto e cheio de oportunidades. Tanto Flask quanto Django são ferramentas poderosas que atendem a diferentes necessidades. Dominar rotas, templates, ORM, APIs REST e deploy vai permitir que você construa desde landing pages simples até sistemas corporativos completos.
Se você precisa de ajuda para desenvolver seu projeto Python, entre em contato pelo WhatsApp para solicitar um orçamento personalizado. Estou à disposição para transformar suas ideias em realidade digital.