Ao construir serviços web ou APIs em Python, uma das primeiras decisões é escolher o framework. Django, FastAPI, Flask — provavelmente você já ouviu falar de todos, mas saber qual se encaixa no seu projeto pode ser surpreendentemente difícil.
Este artigo compara 8 frameworks web Python por caso de uso, dificuldade, velocidade e suporte assíncrono, com exemplos de código práticos.
Visão geral comparativa
| Framework | Uso principal | Dificuldade | Velocidade | Async | Característica |
|---|---|---|---|---|---|
| Django | Sites web grandes | Média | Média | △ | Full-stack, tudo incluído |
| FastAPI | APIs (geral) | Baixa | ◎ | ◎ | Type hints + auto docs |
| Flask | Apps pequenas / protótipos | Baixa | Média | ✗ | Ultra-leve, flexível |
| Sanic | API async de alta velocidade | Média | ◎ | ◎ | async nativo, estilo Flask |
| Quart | Flask → async | Média | Alta | ◎ | API compatível Flask |
| Tornado | Tempo real / longa duração | Alta | Alta | ◎ | Veterano async, I/O próprio |
| Pyramid | Média escala, flexível | Média | Média | △ | Arquitetura escalável |
| Falcon | Só API, máx. performance | Média | ◎ | △ | REST mais rápido |
Não escolha um framework por ser popular ou novo. Adapte-o à escala e requisitos do seu projeto. Para APIs, FastAPI; para sites web completos, Django; para protótipos, Flask — estes três cobrem 90% dos casos.
Django — O padrão full-stack
Django é o framework web Python mais famoso. Autenticação, painel admin, ORM, sessões, proteção CSRF — tudo incluído de série.
Instagram, Mozilla e Pinterest usam Django, provando que escala para alto tráfego.
from django.http import JsonResponse
from django.views import View
class UserView(View):
def get(self, request, user_id):
return JsonResponse({
"user_id": user_id,
"name": "Alice",
})
# urls.py: path('users//', UserView.as_view())
Quando usar:
- Serviços web empresariais, sistemas internos
- Projetos que precisam de painel admin
- E-commerce, plataformas CMS
- Apps com autenticação complexa
O maior trunfo do Django é o Django Admin. Defina seus modelos e ganhe uma interface CRUD admin de graça.
Django sendo “tudo incluído” tem curva de aprendizado íngreme. Iniciantes se sobrecarregam com ORM, templates, middleware e routing de uma vez.
Instalar com pip:
pip install django
FastAPI — O padrão moderno de APIs Python
FastAPI aproveita os type hints do Python para oferecer um framework API de alto desempenho com validação automática, documentação Swagger UI / ReDoc, e suporte nativo async/await.
Seu desempenho rivaliza com Node.js e Go. Desde 2020, tornou-se o padrão de facto para APIs Python.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post("/users/")
async def create_user(user: User):
return {"message": f"{user.name} (age {user.age}) created"}
# POST /users/ {"name":"Alice","age":30}
# → {"message": "Alice (age 30) created"}
Quando usar:
- REST API / backends GraphQL
- Servindo modelos AI / ML
- Backends de sites de ferramentas
- Microsserviços
O /docs (Swagger UI) do FastAPI serve como especificação API viva. A validação Pydantic reduz código de verificação a quase zero.
FastAPI é um framework API — não é feito para renderizar templates HTML. Para painel admin ou CMS, Django é melhor.
Instalar com pip:
pip install fastapi uvicorn
Flask — O micro-framework minimalista
Flask se autodenomina “micro-framework” — o framework web Python mais simples. Seu núcleo é minúsculo; você adiciona funcionalidades conforme necessário via extensões.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/users/")
def get_user(user_id):
return jsonify({"user_id": user_id, "name": "Alice"})
# GET /users/1 → {"user_id": 1, "name": "Alice"}
Quando usar:
- Protótipos e provas de conceito
- Aprendendo dev web Python
- Ferramentas internas pequenas
- Servidores API simples
O ecossistema de extensões do Flask é enorme. Flask-SQLAlchemy, Flask-Login, Flask-CORS — adicione exatamente o que precisa.
Construir app grande em Flask significa projetar toda a arquitetura sozinho. Além de certa escala, o esforço pode superar o de aprender Django.
Instalar com pip:
pip install flask
Sanic — Velocidade nativa async
Sanic é um framework web construído nativamente para async/await. Tem sintaxe intuitiva estilo Flask enquanto funciona completamente assíncrono, usando uvloop para alto throughput.
from sanic import Sanic
from sanic.response import json
app = Sanic("MyApp")
@app.get("/users/")
async def get_user(request, user_id):
return json({"user_id": user_id, "name": "Alice"})
# GET /users/1 → {"user_id": 1, "name": "Alice"}
Quando usar:
- APIs de alto throughput
- Serviços de comunicação em tempo real
- Projetos sem dependência Pydantic
- Times experientes com async
Sanic tem suporte WebSocket integrado — sem bibliotecas extras para tempo real.
O ecossistema do Sanic é menor que o do FastAPI ou Flask. Você precisará montar ORM, validação e auth por conta própria.
Instalar com pip:
pip install sanic
Quart — Flask assíncrono
Quart é um framework web async com API compatível com Flask. Sua principal vantagem: migrar código Flask existente mudando basicamente def para async def.
from quart import Quart, jsonify
app = Quart(__name__)
@app.route("/users/")
async def get_user(user_id):
return await jsonify({"user_id": user_id, "name": "Alice"})
# GET /users/1 → {"user_id": 1, "name": "Alice"}
Quando usar:
- Migrar projeto Flask para async
- Manter ecossistema Flask com async
- WebSocket com sintaxe Flask
Migração do Flask geralmente é tão simples quanto mudar def para async def.
Para projetos novos, FastAPI é quase sempre a escolha mais racional. A vantagem do Quart é especificamente o baixo custo de migração do Flask.
Instalar com pip:
pip install quart
Tornado — O veterano async
Tornado, lançado em 2009 pelo FriendFeed, foi pioneiro do desenvolvimento web assíncrono em Python. Tem seu próprio loop de I/O e se destaca em conexões de longa duração.
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write({"message": "Hello Tornado"})
app = tornado.web.Application([
(r"/", MainHandler),
])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
Quando usar:
- Serviços tempo real com Long Polling / WebSocket
- Manutenção de sistemas Tornado existentes
- Controle fino de I/O async
Tornado inclui um cliente HTTP async integrado, útil para chamadas API paralelas no servidor.
O loop I/O próprio do Tornado pode integrar com asyncio mas não é transparente. Para projetos novos, FastAPI ou Sanic têm ecossistemas mais amplos.
Instalar com pip:
pip install tornado
Pyramid — Arquitetura flexível e escalável
A filosofia do Pyramid: “começar pequeno, terminar grande.” Pode ser tão simples quanto Flask e escalar à complexidade do Django.
from pyramid.config import Configurator
from pyramid.response import Response
import json
def hello(request):
return Response(
json.dumps({"message": "Hello Pyramid"}),
content_type="application/json"
)
with Configurator() as config:
config.add_route("home", "/")
config.add_view(hello, route_name="home")
app = config.make_wsgi_app()
Quando usar:
- Apps de média escala onde Django é pesado e Flask leve demais
- Escolha livre de ORM ou engine de templates
- Projetos de longo prazo com crescimento incremental
O sistema de autorização ACL do Pyramid é sofisticado. Para modelos de permissão complexos, pode ser mais flexível que o auth do Django.
A comunidade do Pyramid é menor, recursos em idiomas não ingleses são escassos.
Instalar com pip:
pip install pyramid
Falcon — O framework REST mais rápido
Falcon é um framework exclusivamente para REST API que elimina tudo não essencial. Focando no processamento HTTP puro, atinge tempos de resposta de primeira linha.
import falcon
import json
class UserResource:
def on_get(self, req, resp, user_id):
resp.content_type = falcon.MEDIA_JSON
resp.text = json.dumps(
{"user_id": int(user_id), "name": "Alice"}
)
app = falcon.App()
app.add_route("/users/{user_id}", UserResource())
Quando usar:
- APIs onde tempo de resposta é crítico
- Gateways API de microsserviços leves
- Minimizar overhead do framework
O middleware do Falcon é simples e rápido. Empilhar auth, logging e rate limiting adiciona overhead mínimo.
Falcon exclui intencionalmente templates, ORM, formulários e sessões. Para algo além de API pura, escolha FastAPI ou Django.
Instalar com pip:
pip install falcon
Guia de seleção + padrões de produção
Na prática, o framework certo depende da escala e propósito do seu projeto.
| Projeto | Recomendado | Por quê |
|---|---|---|
| API de site de ferramentas | FastAPI | Rápido, type-safe, auto-docs |
| Site web empresarial | Django | Admin, auth, ORM integrados |
| Serviço AI / ML | FastAPI | Sinergia Pydantic, async |
| Protótipo / aprendizado | Flask | Menor curva de aprendizado |
| API alto throughput | FastAPI / Sanic | async nativo, top benchmarks |
| Flask → async | Quart | API compatível, migração suave |
| Tempo real (WebSocket) | FastAPI / Tornado | Estabilidade conexão longa |
| API máx. performance | Falcon | Overhead mínimo |
Erros comuns de iniciantes:
- Começar com Django e desistir — Muito para aprender de uma vez. Construa algo com Flask ou FastAPI primeiro
- Construir apps grandes em Flask — A arquitetura se quebra. Considere Django
- Usar FastAPI/Sanic sem entender async — Chamar bibliotecas síncronas bloqueia o event loop
- Escolher por moda — Frameworks são ferramentas. Adapte aos requisitos
O denominador comum: sobre-engenharia. Um projeto pequeno não precisa do stack completo do Django. Comece simples.
Resumo
Os frameworks web Python são fáceis de escolher quando você conhece seu caso de uso.
- APIs (geral) → FastAPI
- Sites web grandes → Django
- Protótipos / aprendizado → Flask
- API async de alta velocidade → Sanic
- Flask → async → Quart
- Tempo real / longa duração → Tornado
- Média escala flexível → Pyramid
- API máx. performance → Falcon
Na dúvida: FastAPI para APIs, Django para sites web, Flask para projetos pequenos. Estes três cobrem a grande maioria dos casos.

Leave a Reply