django-insights
Identifies common performance and security issues in Django projects.
Install
mkdir -p .claude/skills/django-insights && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/13643" && unzip -o skill.zip -d .claude/skills/django-insights && rm skill.zipInstalls to .claude/skills/django-insights
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Diagnóstico de saúde para projetos Django: performance, segurança e arquitetura.Key capabilities
- →Analyze Django models for issues.
- →Detect N+1 queries and excessive logic in views.
- →Identify queries in templates and complexity.
- →Verify migrations for dangerous changes.
- →Inspect settings for insecure configurations.
How it works
The skill analyzes various components of a Django project like models, views, templates, and settings to detect common problems and anti-patterns. It categorizes issues by severity and provides suggested fixes.
Inputs & outputs
When to use django-insights
- →Optimizing database queries
- →Scanning for security risks
- →Reviewing project health
About this skill
Skill: django-insights
Propósito: Detectar problemas típicos e anti-patterns em projetos Django — diagnóstico preventivo de saúde do código.
Quando usar:
- Mensalmente (manutenção preventiva)
- Ao retomar projeto após pausa longa
- Antes de refatorações grandes
- Quando performance degradou
- Ao herdar projeto Django desconhecido
Comando:
/django-insights [--app=nome] [--focus=performance,security,architecture]
Opções:
--app: Analisar apenas um app específico--focus: Focar em área específica
Método recomendado (script)
Use o script incluído para diagnóstico determinístico:
python3 django_insights.py --project-root .
python3 django_insights.py --project-root . --focus security --format json
python3 django_insights.py --project-root . --app payments --fail-on medium
Exit codes: 0 ok, 1 erro de execução, 2 policy fail (--fail-on).
O que a Skill Faz
- Analisa Models — Detecta models problemáticos (muito grandes, sem índices, etc.)
- Analisa Views — Encontra N+1 queries, lógica excessiva
- Analisa Templates — Detecta queries em templates, complexidade
- Verifica Migrações — Detecta migrações perigosas, conflitos
- Inspeciona Settings — Alerta sobre configurações inseguras/ineficientes
- Analisa Signals — Detecta uso excessivo ou problemático
- Verifica Admin — Detecta configurações inseguras ou ineficientes
Problemas Detectados
🔴 Críticos (Devem ser corrigidos)
| Problema | Impacto | Como Detecta |
|---|---|---|
| N+1 Queries em views | Performance terrível | Analisa loops com acesso a FK |
Faltando on_delete em FK | Integridade referencial | AST de models.py |
| Migração de remoção de campo com dados | Perda de dados | Histórico de migrações |
| DEBUG=True em produção | Segurança | settings.py |
| SECRET_KEY hardcoded | Segurança | settings.py |
SQL Injection via .raw() | Segurança | Uso de f-strings em raw SQL |
🟡 Importantes (Recomendado corrigir)
| Problema | Impacto | Como Detecta |
|---|---|---|
| Model > 500 linhas | Manutenibilidade | Contagem de linhas |
| View > 100 linhas | Manutenibilidade | Contagem de linhas |
Signal sem dispatch_uid | Comportamento estranho | AST de signals.py |
| Query em template | Performance | Regex em templates |
| Índice faltante em campo buscado | Performance | Análise de queries vs índices |
| Uso excessivo de signals | Acoplamento oculto | Contagem de signals |
Método save() sobrescrito sem super() | Bugs sutis | AST de models.py |
🟢 Melhorias (Boa prática)
| Problema | Impacto | Como Detecta |
|---|---|---|
Faltando __str__ em model | UX no admin/admin | AST de models.py |
Faltando get_absolute_url | UX, SEO | AST de models.py |
Não usar select_related quando óbvio | Performance | Análise de views |
| Import circular | Manutenibilidade | Grafo de imports |
| Código morto (funções não chamadas) | Limpeza | Análise de referências |
Exemplos de Saída
Exemplo 1: Projeto Herdado (Análise Completa)
$ /django-insights
🔍 Django Insights — Análise de Saúde do Projeto
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 Visão Geral
Django: 4.2
Apps: 8
Models: 42
Views: 127
Templates: 56
Migrações: 156
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔴 PROBLEMAS CRÍTICOS (4)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔴 CRÍTICO: DEBUG=True detectado
Arquivo: settings.py:12
Impacto: EXPÕE INFORMAÇÕES SENSÍVEIS EM PRODUÇÃO
Código:
DEBUG = True
Correção:
DEBUG = os.getenv('DEBUG', 'False') == 'True'
Ação: Configure variável de ambiente DEBUG antes do deploy
─────────────────────────────────────────────────────
🔴 CRÍTICO: N+1 Query em OrderListView
Arquivo: orders/views.py:45
Impacto: 1 query + N queries (uma por order)
Código problemático:
45 | for order in Order.objects.filter(status='pending'):
46 | print(order.customer.name) # ← Query extra!
Correção:
Order.objects.filter(status='pending').select_related('customer')
Economia estimada: ~95% de queries (100 orders = 101 → 2 queries)
─────────────────────────────────────────────────────
🔴 CRÍTICO: Migração perigosa detectada
Arquivo: orders/migrations/0042_remove_order_total.py
Tipo: Remoção de campo com dados existentes
Análise:
- Campo 'total' tem 15,432 registros com dados
- Migração é irreversível sem backup
Recomendação:
1. Faça backup do banco
2. Considere marcar como deprecated primeiro
3. Ou migre dados para outro lugar antes de remover
─────────────────────────────────────────────────────
🔴 CRÍTICO: Signal sem dispatch_uid
Arquivo: orders/signals.py:23
Função: send_notification
Problema: Signal pode ser registrado múltiplas vezes
causando duplicação de notificações
Correção:
@receiver(order_completed, dispatch_uid="orders.notification")
def send_notification(sender, **kwargs):
...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟡 RECOMENDAÇÕES IMPORTANTES (8)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟡 Model muito grande: Order (680 linhas)
Arquivo: orders/models.py
Sugestão: Dividir em mixin ou mover lógica para services
🟡 View muito complexa: PaymentProcessView (145 linhas)
Arquivo: payments/views.py:89
Sugestão: Extrair lógica para PaymentService
🟡 Faltando índice em campo de busca frequente
Model: Customer.email
Campo buscado em: 8 lugares
Sugestão: Adicionar db_index=True ou Index
🟡 Uso excessivo de signals (12 signals)
App: orders
Sugestão: Signals dificultam rastreamento. Considere:
- Explicit calls em vez de signals
- Ou documentar bem cada signal
🟡 Query em template detectada
Template: orders/order_detail.html:34
{{ order.items.filter|length }}
Sugestão: Prepare no view: items_count = order.items.count()
🟡 Método save() sem super()
Model: Product (products/models.py:56)
Risco: Pode quebrar funcionalidades do Django
Correção:
def save(self, *args, **kwargs):
# sua lógica
super().save(*args, **kwargs)
🟡 Import circular detectado
orders → payments → orders
Arquivos: orders/services.py, payments/utils.py
Sugestão: Mover código compartilhado para módulo comum
🟡 Código morto detectado
Função: calculate_old_tax (never called)
Arquivo: orders/utils.py:45
Sugestão: Remover ou verificar se deveria ser usada
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟢 BOAS PRÁTICAS (5)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🟢 Faltando __str__ em models:
- payments/models.py: Transaction
- reports/models.py: ReportConfig
Sugestão: Adicionar para melhor UX no admin/shell
🟢 Faltando get_absolute_url:
- Order, Customer, Product
Benefício: Melhor navegação, SEO, reuso
🟢 Oportunidade de select_related:
View: OrderDetailView
Poderia usar select_related('customer', 'items')
Economia: ~3 queries por request
🟢 Campo de busca sem índice:
Order.tracking_code
Usado em: OrderTrackingView
Sugestão: Adicionar db_index=True
🟢 Template complexo:
reports/dashboard.html (350 linhas)
Sugestão: Dividir em includes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 MÉTRICAS E TENDÊNCIAS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Qualidade do Código:
🔴 Críticos: 4 (deve ser 0)
🟡 Importantes: 8 (meta: <5)
🟢 Melhorias: 5 (opcional)
Cobertura de Testes (estimada):
Models: 60% ⚠️
Views: 30% 🔴
Services: 10% 🔴
Débito Técnico Estimado:
Corrigir críticos: 2-3 dias
Corrigir importantes: 1 semana
Todas melhorias: 2 semanas
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 PRÓXIMAS AÇÕES RECOMENDADAS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Imediato (esta semana):
1. Corrigir DEBUG=True ANTES de qualquer deploy
2. Adicionar select_related em OrderListView
3. Revisar migração 0042 antes de aplicar
Curto prazo (próximas 2 semanas):
4. Refatorar Order model (680 → <300 linhas)
5. Quebrar PaymentProcessView em serviços
6. Adicionar índice em Customer.email
Médio prazo (mês):
7. Documentar ou remover signals excessivos
8. Aumentar cobertura de testes em views
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💾 Exportar Relatório
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
/django-insights --export=relatorio-django-2026-03-02.md
Exemplo 2: Foco em Performance
$ /django-insights --focus=performance
🔍 Django Insights — Foco: Performance
🔴 CRÍTICO: N+1 Queries Detectados (5)
1. orders/views.py:45 (OrderListView)
Loop: for order in orders
Acesso: order.customer.name
Correção: .select_related('customer')
Impacto: ~95% redução de queries
2. products/views.py:89 (ProductCatalog)
Loop: for product in products
Acesso: product.category.name
Correção: .select_related('category')
Impacto: ~90% redução de queries
3. reports/views.py:34 (SalesReport)
Loop: for sale in sales
Acesso: sale.items.all() ← dentro de loop!
Correção: .prefetch_related('items')
Impacto: ~99% redução de queries
🟡 Oportunidades de Otimização (3)
1. Índice faltante: Customer.email
Busca frequente, sem índice
Impacto: Busca O(n) → O(log n)
2. Sem select_related óbvio: OrderDetailView
Usa customer e items, não faz prefetch
Impacto: 3 queries → 1 query
3. Query COUNT sem necessidade: DashboardView
products.count() quando só precisa saber se >0
Correção: Use exists()
Impacto: Query pesada → Query leve
💡 Impacto Total Estimado:
- Redução de queries: ~80%
- Tempo de resposta médio: -60%
- Capacidade de usuários simultâneos: +200%
Exemplo 3: Análise de App Específico
$ /django-
---
*Content truncated.*
When not to use it
- →When the project is not a Django project.
- →When the goal is to decide if a regression is important enough to fix.
Prerequisites
Limitations
- →The skill focuses on typical problems and anti-patterns in Django projects.
- →The analysis is limited to the components specified: models, views, templates, migrations, settings, signals, and admin.
- →The skill does not decide whether a regression is 'important enough to fix'.
How it compares
This skill automates the detection of common Django anti-patterns and security risks, providing categorized reports and specific code-level solutions, which is more efficient than manual code review.
Compared to similar skills
django-insights side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| django-insights (this skill) | 0 | 4mo | Review | Intermediate |
| django-pro | 20 | 4mo | No flags | Intermediate |
| backend-security-coder | 24 | 4mo | No flags | Intermediate |
| spark-optimization | 4 | 2mo | No flags | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
django-pro
sickn33
Master Django 5.x with async views, DRF, Celery, and Django Channels. Build scalable web applications with proper architecture, testing, and deployment. Use PROACTIVELY for Django development, ORM optimization, or complex Django patterns.
backend-security-coder
sickn33
Expert in secure backend coding practices specializing in input validation, authentication, and API security. Use PROACTIVELY for backend security implementations or security code reviews.
spark-optimization
wshobson
Optimize Apache Spark jobs with partitioning, caching, shuffle optimization, and memory tuning. Use when improving Spark performance, debugging slow jobs, or scaling data processing pipelines.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
fastapi-pro
sickn33
Build high-performance async APIs with FastAPI, SQLAlchemy 2.0, and Pydantic V2. Master microservices, WebSockets, and modern Python async patterns. Use PROACTIVELY for FastAPI development, async optimization, or API architecture.
senior-backend
davila7
Comprehensive backend development skill for building scalable backend systems using NodeJS, Express, Go, Python, Postgres, GraphQL, REST APIs. Includes API scaffolding, database optimization, security implementation, and performance tuning. Use when designing APIs, optimizing database queries, implementing business logic, handling authentication/authorization, or reviewing backend code.