DJ

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.zip

Installs 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.
80 charsno explicit “when” trigger
Intermediate

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

You give it
A Django project directory, optionally filtered by app or focus area.
You get back
A health report detailing critical, important, and suggested improvements, with code examples and solutions.

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

  1. Analisa Models — Detecta models problemáticos (muito grandes, sem índices, etc.)
  2. Analisa Views — Encontra N+1 queries, lógica excessiva
  3. Analisa Templates — Detecta queries em templates, complexidade
  4. Verifica Migrações — Detecta migrações perigosas, conflitos
  5. Inspeciona Settings — Alerta sobre configurações inseguras/ineficientes
  6. Analisa Signals — Detecta uso excessivo ou problemático
  7. Verifica Admin — Detecta configurações inseguras ou ineficientes

Problemas Detectados

🔴 Críticos (Devem ser corrigidos)

ProblemaImpactoComo Detecta
N+1 Queries em viewsPerformance terrívelAnalisa loops com acesso a FK
Faltando on_delete em FKIntegridade referencialAST de models.py
Migração de remoção de campo com dadosPerda de dadosHistórico de migrações
DEBUG=True em produçãoSegurançasettings.py
SECRET_KEY hardcodedSegurançasettings.py
SQL Injection via .raw()SegurançaUso de f-strings em raw SQL

🟡 Importantes (Recomendado corrigir)

ProblemaImpactoComo Detecta
Model > 500 linhasManutenibilidadeContagem de linhas
View > 100 linhasManutenibilidadeContagem de linhas
Signal sem dispatch_uidComportamento estranhoAST de signals.py
Query em templatePerformanceRegex em templates
Índice faltante em campo buscadoPerformanceAnálise de queries vs índices
Uso excessivo de signalsAcoplamento ocultoContagem de signals
Método save() sobrescrito sem super()Bugs sutisAST de models.py

🟢 Melhorias (Boa prática)

ProblemaImpactoComo Detecta
Faltando __str__ em modelUX no admin/adminAST de models.py
Faltando get_absolute_urlUX, SEOAST de models.py
Não usar select_related quando óbvioPerformanceAnálise de views
Import circularManutenibilidadeGrafo de imports
Código morto (funções não chamadas)LimpezaAná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

python3Djangoradon

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.

SkillInstallsUpdatedSafetyDifficulty
django-insights (this skill)04moReviewIntermediate
django-pro204moNo flagsIntermediate
backend-security-coder244moNo flagsIntermediate
spark-optimization42moNo flagsAdvanced

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.

2066

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.

2446

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.

431

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.

5201,086

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.

79181

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.

1446

Search skills

Search the agent skills registry