---
title: "Django vs Flask: Qual Framework Escolher? | Python Brasil"
url: "https://python.dev.br/comparacoes/django-vs-flask/"
markdown_url: "https://python.dev.br/comparacoes/django-vs-flask.MD"
description: "Comparação detalhada entre Django e Flask: funcionalidades, performance, curva de aprendizado, mercado de trabalho e quando usar cada framework."
date: "2026-04-10"
author: "Equipe python.dev.br"
---

# Django vs Flask: Qual Framework Escolher? | Python Brasil

Comparação detalhada entre Django e Flask: funcionalidades, performance, curva de aprendizado, mercado de trabalho e quando usar cada framework.


**Django** e **Flask** são os dois frameworks web mais populares do ecossistema Python. Django é o "batteries included" — tudo vem pronto. Flask é o microframework — você monta como quiser. Neste comparativo, vamos te ajudar a escolher o certo para seu projeto.

## Tabela Comparativa

| Aspecto | Django | Flask |
|---------|--------|-------|
| **Tipo** | Full-stack | Microframework |
| **Filosofia** | Batteries included | Faça do seu jeito |
| **ORM** | Django ORM (incluso) | SQLAlchemy (separado) |
| **Admin** | Django Admin (incluso) | Flask-Admin (extensão) |
| **Autenticação** | Inclusa | Flask-Login (extensão) |
| **Migrations** | Inclusas (manage.py migrate) | Flask-Migrate/Alembic |
| **Templates** | Django Templates (incluso) | Jinja2 (incluso) |
| **Curva de aprendizado** | Mais íngreme | Mais suave |
| **Flexibilidade** | Opinativo | Livre |
| **Performance** | Boa | Boa (leve vantagem) |
| **Ideal para** | Apps completas, CMS, e-commerce | APIs, microserviços, protótipos |
| **Mercado no Brasil** | Muito forte | Forte |

## Arquitetura: Monolito vs Microframework

### Django: Tudo Incluído

Django segue o padrão **MVT (Model-View-Template)** e vem com:

- ORM completo com migrations automáticas
- Sistema de autenticação e autorização
- Django Admin — painel administrativo automático
- Proteção contra CSRF, XSS, SQL injection
- Sistema de URLs com namespaces
- Internacionalização (i18n) embutida
- Cache framework
- Sistema de e-mails

```python
# Django — projeto funcional em poucos minutos
# models.py
from django.db import models

class Produto(models.Model):
    nome = models.CharField(max_length=200)
    preco = models.DecimalField(max_digits=10, decimal_places=2)
    estoque = models.PositiveIntegerField(default=0)
    ativo = models.BooleanField(default=True)
    criado_em = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-criado_em"]
        verbose_name_plural = "Produtos"

    def __str__(self):
        return f"{self.nome} - R$ {self.preco}"

    @property
    def disponivel(self):
        return self.ativo and self.estoque > 0

# admin.py — admin pronto em 3 linhas
from django.contrib import admin
from .models import Produto

@admin.register(Produto)
class ProdutoAdmin(admin.ModelAdmin):
    list_display = ["nome", "preco", "estoque", "ativo"]
    list_filter = ["ativo"]
    search_fields = ["nome"]

# views.py
from django.views.generic import ListView, DetailView
from .models import Produto

class ProdutoListView(ListView):
    model = Produto
    queryset = Produto.objects.filter(ativo=True)
    template_name = "produtos/lista.html"
    paginate_by = 12
    context_object_name = "produtos"

class ProdutoDetailView(DetailView):
    model = Produto
    template_name = "produtos/detalhe.html"
```

O Django Admin sozinho justifica usar Django para projetos que precisam de CRUD administrativo.

### Flask: Monte o Seu

Flask te dá o mínimo e você adiciona o que precisa:

```python
# Flask — controle total sobre cada componente
from flask import Flask, render_template, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///loja.db"

db = SQLAlchemy(app)
migrate = Migrate(app, db)

class Produto(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    nome = db.Column(db.String(200), nullable=False)
    preco = db.Column(db.Float, nullable=False)
    estoque = db.Column(db.Integer, default=0)
    ativo = db.Column(db.Boolean, default=True)

    def to_dict(self):
        return {
            "id": self.id,
            "nome": self.nome,
            "preco": self.preco,
            "estoque": self.estoque,
        }

@app.route("/")
def listar_produtos():
    produtos = Produto.query.filter_by(ativo=True).all()
    return render_template("produtos/lista.html", produtos=produtos)

@app.route("/api/produtos")
def api_produtos():
    page = request.args.get("page", 1, type=int)
    produtos = Produto.query.filter_by(ativo=True).paginate(
        page=page, per_page=12
    )
    return jsonify([p.to_dict() for p in produtos.items])
```

Flask é mais explícito — você vê cada peça montada. Isso é uma vantagem para aprendizado e projetos pequenos, mas requer mais decisões em projetos grandes.

## APIs REST

### Django REST Framework:

```python
# serializers.py
from rest_framework import serializers
from .models import Produto

class ProdutoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Produto
        fields = ["id", "nome", "preco", "estoque", "ativo"]

# viewsets.py
from rest_framework import viewsets
from .models import Produto
from .serializers import ProdutoSerializer

class ProdutoViewSet(viewsets.ModelViewSet):
    queryset = Produto.objects.filter(ativo=True)
    serializer_class = ProdutoSerializer
    filterset_fields = ["ativo"]
    search_fields = ["nome"]
    ordering = ["-criado_em"]
```

### Flask com Marshmallow:

```python
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema

class ProdutoSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = Produto
        load_instance = True

produto_schema = ProdutoSchema()
produtos_schema = ProdutoSchema(many=True)

@app.route("/api/produtos", methods=["GET"])
def listar():
    produtos = Produto.query.filter_by(ativo=True).all()
    return jsonify(produtos_schema.dump(produtos))

@app.route("/api/produtos", methods=["POST"])
def criar():
    produto = produto_schema.load(request.json, session=db.session)
    db.session.add(produto)
    db.session.commit()
    return jsonify(produto_schema.dump(produto)), 201
```

Para APIs REST puras, considere também [FastAPI](/comparacoes/fastapi-vs-django/) — que supera ambos em velocidade de desenvolvimento e performance.

## Performance

| Benchmark | Django | Flask |
|-----------|--------|-------|
| Requests/s (hello world) | ~3.000 | ~4.500 |
| Requests/s (DB query) | ~1.500 | ~2.000 |
| Latência média | ~8ms | ~5ms |
| Uso de memória (idle) | ~50MB | ~20MB |

Flask é ligeiramente mais rápido por ser mais leve, mas na prática a diferença é negligenciável — o gargalo geralmente é o banco de dados, não o framework.

Para alta performance, considere [FastAPI com async](/glossario/fastapi/) que é significativamente mais rápido que ambos.

## Ecossistema de Extensões

### Django vem com:

- Admin, ORM, migrations, autenticação, cache, e-mails, i18n, formulários, middleware, signals, management commands

### Flask precisa de extensões para:

| Funcionalidade | Extensão Flask |
|---------------|---------------|
| ORM | Flask-SQLAlchemy |
| Migrations | Flask-Migrate |
| Auth | Flask-Login + Flask-Security |
| Admin | Flask-Admin |
| Forms | WTForms |
| API REST | Flask-RESTful ou Marshmallow |
| CORS | Flask-CORS |
| Cache | Flask-Caching |

A vantagem de Flask é que você escolhe cada componente. A desvantagem é que você **precisa** escolher e integrar cada componente.

## Mercado de Trabalho no Brasil

### Django

- Framework Python web **mais demandado** no Brasil
- Presente em empresas grandes e startups
- Muitas vagas em [empresas brasileiras](/empresas/) que usam Python
- Ideal para aplicações que precisam de admin e gestão de dados

### Flask

- Popular em **microserviços e APIs**
- Comum em **startups** e projetos menores
- Geralmente aparece junto com Docker e cloud
- Menos vagas dedicadas que Django, mas forte demanda

Confira as [vagas Python disponíveis](/vagas/) para ver a demanda real no mercado.

## Quando Usar Cada Um

### Escolha Django se:

- Precisa de **admin panel** rápido
- Vai construir uma **aplicação completa** (CMS, e-commerce, SaaS)
- Quer **produtividade máxima** com tudo pronto
- A equipe é **grande** e precisa de convenções consistentes
- Precisa de **autenticação e autorização** robustas
- O projeto vai **crescer** ao longo dos anos

### Escolha Flask se:

- Vai construir uma **API pequena** ou microserviço
- Quer **controle total** sobre cada componente
- O projeto é **simples** e não precisa de admin
- Está **aprendendo** web development com Python
- Vai **integrar** com um frontend separado (React, Vue)
- Precisa de **leveza** e startup rápido

## Prós e Contras

### Django

**Prós:**
- Tudo incluído — desenvolvimento rápido
- Django Admin é insubstituível
- ORM poderoso com migrations automáticas
- Segurança built-in (CSRF, XSS, SQL injection)
- Documentação excepcional
- Comunidade gigante

**Contras:**
- Opinativo — difícil fugir do "jeito Django"
- Overhead para projetos simples
- Curva de aprendizado mais íngreme
- Monolítico por padrão

### Flask

**Prós:**
- Simples e fácil de aprender
- Flexibilidade total
- Leve e rápido para iniciar
- Ideal para microserviços
- Fácil de entender o código por completo

**Contras:**
- Precisa montar tudo manualmente
- Decisões demais em projetos grandes
- Extensões podem conflitar
- Sem admin built-in
- Menos estrutura = mais chances de código desorganizado

## Conclusão — Qual Escolher?

Para **aplicações web completas** com admin, autenticação e gestão de dados, **Django é a escolha certa**. Para **APIs, microserviços e projetos leves**, **Flask** ou [FastAPI](/comparacoes/fastapi-vs-django/) são melhores opções.

Se está começando, Flask é mais fácil de entender (menos mágica). Mas para ser produtivo em projetos reais, Django vale o investimento na curva de aprendizado.

Explore nossos [guias de Django](/guias/primeiro-projeto-django/) e [Flask](/guias/primeiro-projeto-flask/) para começar.

> 🔗 Veja também: [FastAPI vs Django](/comparacoes/fastapi-vs-django/), [Pandas vs Polars](/comparacoes/pandas-vs-polars/) e nossos [guias práticos](/guias/).

Se você já domina frameworks Python e quer explorar o ecossistema web de outras linguagens, confira os frameworks web em <a href="https://golang.com.br/blog/" target="_blank" rel="noopener" onclick="umami.track('portfolio-site-click', {source: 'python.dev.br', target: 'golang.com.br', content: 'django-vs-flask'})">Go no golang.com.br</a> e as opções de backend em <a href="https://rustlang.com.br/blog/" target="_blank" rel="noopener" onclick="umami.track('portfolio-site-click', {source: 'python.dev.br', target: 'rustlang.com.br', content: 'django-vs-flask'})">Rust no rustlang.com.br</a>.

## Perguntas Frequentes

### Django está desatualizado?

Não. Django 5.x trouxe async views, formulários melhorados e computed fields. O framework continua evoluindo e é amplamente adotado.

### Flask é bom para projetos grandes?

Pode ser, mas exige mais disciplina na organização. Blueprints ajudam a estruturar, mas em projetos muito grandes, Django ou FastAPI podem ser melhores escolhas.

### Posso migrar de Flask para Django?

Sim, mas dá trabalho. Os dois têm ORM e sistema de rotas diferentes. Vale avaliar se a migração compensa ou se é melhor criar um novo projeto em Django.

### E o FastAPI?

[FastAPI](/glossario/fastapi/) é excelente para APIs modernas com async e validação automática via [Pydantic](/glossario/pydantic/). Se o seu projeto é puramente uma API, FastAPI pode ser melhor que ambos. Veja nosso [comparativo FastAPI vs Django](/comparacoes/fastapi-vs-django/).
