O que eu adoro no Django
O Django surge como um framework web amplamente admirado por sua estabilidade, compatibilidade retroativa de longo prazo, ORM poderoso e recursos integrados como a interface admin e uma documentação robusta. Comentadores destacam como sua evolução “chata”, incremental, reduz retrabalho e o torna bem adequado para produtos grandes e duradouros, sem deixar de oferecer saídas de escape para SQL cru, arquiteturas alternativas ou serviços externos. As críticas se concentram no ORM no estilo Active Record (e sua tendência a consultas N+1), nas limitações de async e desempenho, na complexidade de implantação em comparação com stacks serverless e em filosofias diferentes das de frameworks como Rails, FastAPI e Phoenix.
Sentimento geral
- Muitos comentaristas são muito positivos em relação ao Django: “bem projetado”, “chato no bom sentido” e produtivo para aplicativos pequenos e grandes.
- Um tema recorrente é a estabilidade de longo prazo: projetos de vários anos e até várias décadas foram atualizados entre versões principais com quebras mínimas.
Pontos fortes centrais apontados
- Sem mudanças dramáticas: evolução lenta e cuidadosa é muito valorizada em comparação com frameworks que forçam reescritas.
- ORM + migrations: amplamente elogiados por potência e flexibilidade; conseguem expressar SQL complexo e têm saídas de escape para SQL cru.
- Admin: muitas vezes “vende” o Django para clientes e é reutilizado como back-office interno ou inspetor de dados.
- Flexibilidade: visto como opinativo, mas não rígido; é fácil sobrescrever comportamento, customizar roteamento, usar Jinja2, plugar outros ORMs ou dividir responsabilidades com outros serviços (por exemplo, APIs em Rust com Django para migrations/admin).
- Ecossistema: DRF + OpenAPI + geradores de TS, django-allauth, ferramentas de arquivo único e frontends em Rust como django-bolt recebem elogios.
Pontos problemáticos e críticas
- ORM/ActiveRecord:
- Críticas: incentiva consultas “em todo lugar”, problemas fáceis de N+1, carregamento implícito amplo, padrão ActiveRecord desagradado por alguns; sintaxe como
field__gtee relações fortemente baseadas em strings são chamadas de feias / frágeis. - Defesas: N+1 pode ser tratado com
select_related/prefetch_related, próximos modos de fetch e disciplina. Alguns veem as reclamações como questões de “habilidade/encaixe”.
- Críticas: incentiva consultas “em todo lugar”, problemas fáceis de N+1, carregamento implícito amplo, padrão ActiveRecord desagradado por alguns; sintaxe como
- Arquitetura e estrutura dos apps:
- Preocupações com spaghetti vindo de consultas entre apps,
models.py/views.pyenormes e falta de camadas de serviço claras. - Outros defendem camadas explícitas de serviço/seletor, signals para desacoplamento e apps centrais/agregadores em formato “estrela”. Signals são vistos como poderosos, mas arriscados por terem efeitos colaterais ocultos.
- Preocupações com spaghetti vindo de consultas entre apps,
- Content Types: impressionante, mas com alerta contra seu uso para manutenibilidade de longo prazo.
Comparações com Rails e política
- Alguns preferem Django ao Rails por motivos técnicos (menos “Rails Way”, mais flexível).
- Um tópico lateral discute evitar Rails por causa das visões públicas de seu criador; outros argumentam pela separação entre software e política do autor, ou observam inconsistência em boicotes seletivos.
Async, desempenho, implantação
- A história de async e o desempenho de alta vazão são citados como pontos mais fracos; alguns migram para Go ou outras pilhas por isso.
- A implantação é vista como mais difícil do que frontends estáticos/microsserviços porque o Django precisa de um processo de servidor 24/7.