Communitygithub.com

django-verification

Bucle de verificación para proyectos Django: migraciones, linting, pruebas con cobertura, análisis de seguridad y comprobaciones de preparación para el despliegue antes de un PR o lanzamiento.

¿Qué es django-verification?

Esta habilidad define un pipeline completo de verificación de 12 fases para proyectos Django, diseñado para ejecutarse antes de abrir Pull Requests, después de cambios importantes o antes del despliegue a producción. Cubre desde la comprobación del entorno y la calidad del código (mypy, ruff, black, isort) hasta migraciones, pruebas con cobertura (pytest-cov), análisis de seguridad (pip-audit, bandit, gitleaks), rendimiento (detección de consultas N+1), activos estáticos y revisión de configuración. Es compatible con cualquier proyecto Django y se integra naturalmente con GitHub Actions mediante el workflow YAML incluido. El resultado es un informe detallado que resume el estado de cada fase, facilitando la toma de decisiones sobre la preparación para el despliegue.

Compatible con~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/django-verification

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Bucle de Verificación de Django

Ejecutar antes de PRs, después de cambios importantes y antes del despliegue para garantizar la calidad y seguridad de la aplicación Django.

Cuándo activarlo

  • Antes de abrir un Pull Request para un proyecto Django
  • Después de cambios importantes en modelos, actualizaciones de migraciones o actualizaciones de dependencias
  • Verificación previa al despliegue en staging o producción
  • Ejecutar el pipeline completo: entorno → lint → test → seguridad → preparación para despliegue
  • Validar la seguridad de las migraciones y la cobertura de pruebas

Fase 1: Comprobación del Entorno

# Verificar versión de Python
python --version  # Debe coincidir con los requisitos del proyecto

# Comprobar entorno virtual
which python
pip list --outdated

# Verificar variables de entorno
python -c "import os; import environ; print('DJANGO_SECRET_KEY set' if os.environ.get('DJANGO_SECRET_KEY') else 'FALTA: DJANGO_SECRET_KEY')"

Si el entorno está mal configurado, detener y corregir.

Fase 2: Calidad y Formato del Código

# Comprobación de tipos
mypy . --config-file pyproject.toml

# Linting con ruff
ruff check . --fix

# Formateo con black
black . --check
black .  # Auto-corregir

# Ordenamiento de imports
isort . --check-only
isort .  # Auto-corregir

# Comprobaciones específicas de Django
python manage.py check --deploy

Problemas comunes:

  • Falta de anotaciones de tipo en funciones públicas
  • Violaciones de formato PEP 8
  • Imports sin ordenar
  • Configuración de depuración dejada en configuración de producción

Fase 3: Migraciones

# Comprobar migraciones no aplicadas
python manage.py showmigrations

# Crear migraciones faltantes
python manage.py makemigrations --check

# Simular aplicación de migraciones
python manage.py migrate --plan

# Aplicar migraciones (entorno de prueba)
python manage.py migrate

# Comprobar conflictos de migraciones
python manage.py makemigrations --merge  # Solo si existen conflictos

Informe:

  • Número de migraciones pendientes
  • Conflictos de migraciones
  • Cambios en modelos sin migraciones

Fase 4: Pruebas + Cobertura

# Ejecutar todas las pruebas con pytest
pytest --cov=apps --cov-report=html --cov-report=term-missing --reuse-db

# Ejecutar pruebas de una app específica
pytest apps/users/tests/

# Ejecutar con marcadores
pytest -m "not slow"  # Omitir pruebas lentas
pytest -m integration  # Solo pruebas de integración

# Informe de cobertura
open htmlcov/index.html

Informe:

  • Pruebas totales: X pasadas, Y fallidas, Z omitidas
  • Cobertura general: XX%
  • Desglose de cobertura por app

Objetivos de cobertura:

ComponenteObjetivo
Modelos90%+
Serializers85%+
Vistas80%+
Servicios90%+
General80%+

Fase 5: Escaneo de Seguridad

# Vulnerabilidades de dependencias
pip-audit
safety check --full-report

# Comprobaciones de seguridad de Django
python manage.py check --deploy

# Linter de seguridad Bandit
bandit -r . -f json -o bandit-report.json

# Escaneo de secretos (si gitleaks está instalado)
gitleaks detect --source . --verbose

# Comprobación de variables de entorno
python -c "from django.core.exceptions import ImproperlyConfigured; from django.conf import settings; settings.DEBUG"

Informe:

  • Dependencias vulnerables encontradas
  • Problemas de configuración de seguridad
  • Secretos hardcodeados detectados
  • Estado de DEBUG (debe ser False en producción)

Fase 6: Comandos de Gestión de Django

# Comprobar problemas en modelos
python manage.py check

# Recopilar archivos estáticos
python manage.py collectstatic --noinput --clear

# Crear superusuario (si es necesario para pruebas)
echo "from apps.users.models import User; User.objects.create_superuser('[email protected]', 'admin')" | python manage.py shell

# Integridad de la base de datos
python manage.py check --database default

# Verificación de caché (si se usa Redis)
python -c "from django.core.cache import cache; cache.set('test', 'value', 10); print(cache.get('test'))"

Fase 7: Comprobaciones de Rendimiento

# Salida de Django Debug Toolbar (comprobar consultas N+1)
# Ejecutar en modo desarrollo con DEBUG=True y acceder a una página
# Buscar consultas duplicadas en el panel SQL

# Análisis de número de consultas
django-admin debugsqlshell  # Si django-debug-sqlshell está instalado

# Comprobar índices faltantes
python manage.py shell << EOF
from django.db import connection
with connection.cursor() as cursor:
    cursor.execute("SELECT table_name, index_name FROM information_schema.statistics WHERE table_schema = 'public'")
    print(cursor.fetchall())
EOF

Informe:

  • Número de consultas por página (debería ser < 50 para páginas típicas)
  • Índices de base de datos faltantes
  • Consultas duplicadas detectadas

Fase 8: Activos Estáticos

# Comprobar dependencias npm (si se usa npm)
npm audit
npm audit fix

# Compilar archivos estáticos (si se usa webpack/vite)
npm run build

# Verificar archivos estáticos
ls -la staticfiles/
python manage.py findstatic css/style.css

Fase 9: Revisión de Configuración

# Ejecutar en shell de Python para verificar configuraciones
python manage.py shell << EOF
from django.conf import settings
import os

# Comprobaciones críticas
checks = {
    'DEBUG es False': not settings.DEBUG,
    'SECRET_KEY configurado': bool(settings.SECRET_KEY and len(settings.SECRET_KEY) > 30),
    'ALLOWED_HOSTS configurado': len(settings.ALLOWED_HOSTS) > 0,
    'HTTPS habilitado': getattr(settings, 'SECURE_SSL_REDIRECT', False),
    'HSTS habilitado': getattr(settings, 'SECURE_HSTS_SECONDS', 0) > 0,
    'Base de datos configurada': settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3',
}

for check, result in checks.items():
    status = '✓' if result else '✗'
    print(f"{status} {check}")
EOF

Fase 10: Configuración de Registro

# Probar salida de registro
python manage.py shell << EOF
import logging
logger = logging.getLogger('django')
logger.warning('Mensaje de advertencia de prueba')
logger.error('Mensaje de error de prueba')
EOF

# Comprobar archivos de registro (si están configurados)
tail -f /var/log/django/django.log

Fase 11: Documentación de API (si DRF)

# Generar esquema
python manage.py generateschema --format openapi-json > schema.json

# Validar esquema
# Comprobar que schema.json es JSON válido
python -c "import json; json.load(open('schema.json'))"

# Acceder a la interfaz Swagger (si se usa drf-yasg)
# Visitar http://localhost:8000/swagger/ en el navegador

Fase 12: Revisión de Diff

# Mostrar estadísticas de diff
git diff --stat

# Mostrar cambios reales
git diff

# Mostrar archivos modificados
git diff --name-only

# Comprobar problemas comunes
git diff | grep -i "todo\|fixme\|hack\|xxx"
git diff | grep "print("  # Sentencias de depuración
git diff | grep "DEBUG = True"  # Modo de depuración
git diff | grep "import pdb"  # Depurador

Lista de verificación:

  • Sin sentencias de depuración (print, pdb, breakpoint())
  • Sin comentarios TODO/FIXME en código crítico
  • Sin secretos o credenciales hardcodeados
  • Migraciones de base de datos incluidas para cambios en modelos
  • Cambios de configuración documentados
  • Manejo de errores presente para llamadas externas
  • Gestión de transacciones donde sea necesario

Plantilla de Salida

INFORME DE VERIFICACIÓN DE DJANGO
==================================

Fase 1: Comprobación del Entorno
  ✓ Python 3.11.5
  ✓ Entorno virtual activo
  ✓ Todas las variables de entorno configuradas

Fase 2: Calidad del Código
  ✓ mypy: Sin errores de tipo
  ✗ ruff: 3 problemas encontrados (auto-corregidos)
  ✓ black: Sin problemas de formato
  ✓ isort: Imports correctamente ordenados
  ✓ manage.py check: Sin problemas

Fase 3: Migraciones
  ✓ Sin migraciones no aplicadas
  ✓ Sin conflictos de migraciones
  ✓ Todos los modelos tienen migraciones

Fase 4: Pruebas + Cobertura
  Pruebas: 247 pasadas, 0 fallidas, 5 omitidas
  Cobertura:
    General: 87%
    users: 92%
    products: 89%
    orders: 85%
    payments: 91%

Fase 5: Escaneo de Seguridad
  ✗ pip-audit: 2 vulnerabilidades encontradas (requiere corrección)
  ✓ safety check: Sin problemas
  ✓ bandit: Sin problemas de seguridad
  ✓ Sin secretos detectados
  ✓ DEBUG = False

Fase 6: Comandos de Django
  ✓ collectstatic completado
  ✓ Integridad de base de datos OK
  ✓ Backend de caché accesible

Fase 7: Rendimiento
  ✓ Sin consultas N+1 detectadas
  ✓ Índices de base de datos configurados
  ✓ Número de consultas aceptable

Fase 8: Activos Estáticos
  ✓ npm audit: Sin vulnerabilidades
  ✓ Activos compilados exitosamente
  ✓ Archivos estáticos recopilados

Fase 9: Configuración
  ✓ DEBUG = False
  ✓ SECRET_KEY configurado
  ✓ ALLOWED_HOSTS configurado
  ✓ HTTPS habilitado
  ✓ HSTS habilitado
  ✓ Base de datos configurada

Fase 10: Registro
  ✓ Registro configurado
  ✓ Archivos de registro escribibles

Fase 11: Documentación de API
  ✓ Esquema generado
  ✓ Interfaz Swagger accesible

Fase 12: Revisión de Diff
  Archivos modificados: 12
  +450, -120 líneas
  ✓ Sin sentencias de depuración
  ✓ Sin secretos hardcodeados
  ✓ Migraciones incluidas

RECOMENDACIÓN: ADVERTENCIA: Corregir vulnerabilidades de pip-audit antes de desplegar

PRÓXIMOS PASOS:
1. Actualizar dependencias vulnerables
2. Re-ejecutar escaneo de seguridad
3. Desplegar en staging para pruebas finales

Lista de Verificación Pre-Despliegue

  • Todas las pruebas pasando
  • Cobertura ≥ 80%
  • Sin vulnerabilidades de seguridad
  • Sin migraciones no aplicadas
  • DEBUG = False en configuración de producción
  • SECRET_KEY correctamente configurado
  • ALLOWED_HOSTS configurado correctamente
  • Copias de seguridad de base de datos habilitadas
  • Archivos estáticos recopilados y servidos
  • Registro configurado y funcionando
  • Monitoreo de errores (Sentry, etc.) configurado
  • CDN configurado (si aplica)
  • Backend de caché/Redis configurado
  • Trabajadores Celery ejecutándose (si aplica)
  • HTTPS/SSL configurado
  • Variables de entorno documentadas

Integración Continua

Ejemplo de GitHub Actions

# .github/workflows/django-verification.yml
name: Django Verification

on: [push, pull_request]

jobs:
  verify:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:14
        env:
          POSTGRES_PASSWORD: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'

      - name: Cache pip
        uses: actions/cache@v3
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}

      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          pip install ruff black mypy pytest pytest-django pytest-cov bandit safety pip-audit

      - name: Code quality checks
        run: |
          ruff check .
          black . --check
          isort . --check-only
          mypy .

      - name: Security scan
        run: |
          bandit -r . -f json -o bandit-report.json
          safety check --full-report
          pip-audit

      - name: Run tests
        env:
          DATABASE_URL: postgres://postgres:postgres@localhost:5432/test
          DJANGO_SECRET_KEY: test-secret-key
        run: |
          pytest --cov=apps --cov-report=xml --cov-report=term-missing

      - name: Upload coverage
        uses: codecov/codecov-action@v3

Referencia Rápida

ComprobaciónComando
Entornopython --version
Comprobación de tiposmypy .
Lintingruff check .
Formateoblack . --check
Migracionespython manage.py makemigrations --check
Pruebaspytest --cov=apps
Seguridadpip-audit && bandit -r .
Comprobación Djangopython manage.py check --deploy
Collectstaticpython manage.py collectstatic --noinput
Estadísticas de diffgit diff --stat

Recuerda: La verificación automatizada detecta problemas comunes pero no reemplaza la revisión manual de código y las pruebas en el entorno de staging.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Skills relacionados