📹 REQUISITOS OBLIGATORIOS DEL VIDEO DE PRESENTACIÓN (EVIDENCIA)
⚠️ REGLAS OBLIGATORIAS PARA EVALUACIÓN DEL VIDEO
El incumplimiento de CUALQUIERA de estas reglas resultará en la NO ACEPTACIÓN del video y la necesidad de rehacerlo completamente.
Al INICIO del video debes presentarte formalmente diciendo:
- Nombre completo (Apellido Paterno, Apellido Materno, Nombres)
- Grupo (ejemplo: DSM5-1)
- Asignatura (Aplicaciones Web Orientadas a Servicios)
- Práctica que realizarás (ejemplo: "Voy a demostrar la práctica de Unidad 4: Implementación de Autenticación JWT, OAuth 2.0, WebSockets para Comunicación en Tiempo Real, GraphQL y Seguridad Avanzada en APIs")
Ejemplo de presentación: "Hola, mi nombre es Prado Díaz Bernardo del grupo DSM5-1, de la asignatura Aplicaciones Web Orientadas a Servicios. En este video voy a demostrar la práctica de Unidad 4: Implementación de Autenticación JWT, OAuth 2.0, WebSockets para Comunicación en Tiempo Real, GraphQL y Seguridad Avanzada en APIs para nuestro Sistema de Biblioteca Digital..."
La pantalla DEBE estar dividida en 3 SECCIONES específicas:
📐 Distribución de pantalla:
- Esquina inferior derecha: Tu video/cámara (1/6 de la altura total de la pantalla)
- Desde el borde superior del video hasta arriba: La GUÍA abierta en el navegador (este documento HTML)
- Todo el lado izquierdo: Visual Studio Code, navegador con las prácticas, consolas, etc.
⚠️ Las 3 secciones deben ser VISIBLES SIMULTÁNEAMENTE durante TODO el video.
La pantalla DEBE estar dividida en 3 SECCIONES específicas:
⚠️ Las 3 secciones deben ser VISIBLES SIMULTÁNEAMENTE durante TODO el video.
- Grabado Todo: Debe estar grabado toda la GUIA tanto de manera Local como Remota. Todo el Proceso.
- Volumen ALTO: El audio debe escucharse FUERTE Y CLARO en cualquier computadora
- Calidad de video: Resolución mínima 720p (HD), todo el texto debe ser LEGIBLE
- Sin ruidos de fondo: Grabar en un ambiente silencioso
- Voz clara: Hablar pausado, claro y con buena dicción
- Solo tu voz: NO se debe escuchar la voz de otra persona durante la grabación
⚠️ Si el audio no se escucha correctamente o el video es de baja calidad, será RECHAZADO.
Mientras trabajas, debes:
- Explicar de forma general cada paso que realizas siguiendo la guía paso a paso
- Leer y seguir la GUÍA visible en la pantalla mientras trabajas
- Describir qué tecnología estás usando: JWT (autenticación sin estado con tokens), OAuth 2.0 (autorización con servicios externos), WebSockets (comunicación bidireccional en tiempo real), GraphQL (consultas flexibles de datos) y para qué sirve cada una
- Mostrar el código que escribes: settings.py para JWT/OAuth, consumers.py para WebSockets, schema.py para GraphQL, middleware de seguridad, validators.py
- Demostrar el funcionamiento de JWT: login obteniendo access y refresh token, verify token, refresh token automático, uso del token en headers Authorization
- Demostrar OAuth 2.0: configurar aplicación OAuth, flujo de autorización completo, obtención de token OAuth, uso del token para acceder a recursos protegidos
- Demostrar WebSockets: conexión en tiempo real, envío y recepción de mensajes en chat, notificaciones push, desconexión de usuarios, broadcast a grupo
- Demostrar GraphQL: ejecutar queries en GraphiQL (obtener libros con campos específicos, búsquedas, filtros), mutations (crear/actualizar datos), ventajas vs REST
- Demostrar Seguridad: rate limiting (exceder límite y ver error 429), validaciones de entrada (SQL injection, XSS), CORS configurado, CSRF protection, HTTPS headers
- Mostrar comandos en terminal: pip install djangorestframework-simplejwt, pip install django-oauth-toolkit, pip install channels channels-redis, pip install graphene-django, python manage.py migrate, daphne -p 8000, etc.
- Verificar que todo funciona en tiempo real: Postman para JWT/OAuth, GraphiQL para GraphQL, cliente JavaScript para WebSockets, navegador para interfaces
- Insertar 5 registros en cada Tabla tanto de manera Local primero como en producción después (Libros, Autores, Categorías, Préstamos, Usuarios)
- Probar integración externa: importar libro desde Google Books API usando ISBN, mostrar datos obtenidos
- Narrar los errores si los hay y cómo los resuelves (detener grabación, resolver con logs/documentación, reiniciar mostrando la solución implementada)
NO es válido grabar en silencio o sin explicar. Debes NARRAR todo el proceso demostrando comprensión profunda de JWT, OAuth 2.0, WebSockets, GraphQL y Seguridad Avanzada en APIs. Explica diferencias entre autenticación tradicional y JWT, ventajas de OAuth 2.0, por qué WebSockets vs HTTP polling, beneficios de GraphQL vs REST.
Al FINAL del video debes:
- Repetir tu nombre completo (Apellido Paterno, Apellido Materno, Nombres)
- Repetir tu grupo (ejemplo: DSM5-1)
- Dar un pequeño resumen de lo que se realizó en el video (JWT, OAuth, WebSockets, GraphQL, Seguridad)
- Mencionar lo aprendido brevemente (ejemplo: "Aprendí a implementar autenticación moderna con JWT y OAuth 2.0, comunicación bidireccional en tiempo real con WebSockets, crear APIs flexibles con GraphQL, aplicar medidas de seguridad profesionales como rate limiting, validaciones, CORS y CSRF protection, e integrar servicios externos como Google Books API")
- Destacar tecnologías dominadas: Mencionar que ahora dominas autenticación sin estado (stateless), autorización OAuth, comunicación asíncrona, consultas GraphQL optimizadas y seguridad de nivel empresarial
- Despedirte formalmente (ejemplo: "Gracias por su atención, hasta luego")
Ejemplo de cierre: "Esto ha sido todo, mi nombre es Prado Díaz Bernardo del grupo DSM5-1. En este video realicé la práctica de Unidad 4 implementando autenticación JWT con tokens de acceso y refresh, OAuth 2.0 para login con servicios externos, WebSockets para chat y notificaciones en tiempo real, GraphQL para consultas flexibles de datos y múltiples medidas de seguridad avanzada incluyendo rate limiting, validaciones anti-SQL injection y XSS, CORS, CSRF y HTTPS headers en el Sistema de Biblioteca Digital. Aprendí a construir aplicaciones web modernas con autenticación robusta, comunicación en tiempo real y APIs seguras listas para producción. Estas son tecnologías usadas por empresas como Google, Facebook, Netflix y Twitter. Gracias por su atención."
No hay tiempo máximo. Los minutos que sean necesarios, no debe incluirse los errores en la grabación. En cuanto haya alguno debén detener la grabación y ver como fue la corrección paso a paso, también incluirla en el video.
Y solo debe ser un SOLO video no varios, Entonces si deben pegar varios videos, deberán hacerlo para que su examen tenga validez para ser revisado con todos los requerimientos solicitados. Lo que su conocimiento no llegue a saber, deberan aprender a hacerlo. Como hacerlo, Hay muchos recursos de apredizaje en internet. Para Lograrlo.
Solo debe escucharse la voz del alumno, durante el video, no la de otra persona mas, por ello debe el alumno prepararse antes de iniciar la grabación. Y durante este proceso debe verse esta Guia de apoyo, para que vayan diciendo lo que se va solicitando, todo esto es requisito para tener derecho a la evaluación.
Durante la grabación No se debe ver la utilizacion de la IA(inteligencia Artificial) una vez se detecte un error, se detiene el video y se resuleve con (IA) si asi lo eligen, despues se reinicia video, se explica que ocurrio, y se muestra lo que se realizo apoyado con la IA y las partes de codigo que cambio.
Software recomendado para grabación de pantalla con cámara, No PRESENTE marca de AGUA:
- OBS Studio (gratuito y profesional)
- Loom (gratuito con límites)
- Zoom (grabar reunión personal)
- Camtasia (de pago)
- ShareX (gratuito)
Asegúrate de que tu rostro sea visible constantemente en la esquina inferior derecha.
Debe mostrar el funcionamiento completo de la práctica integrando todas las tecnologías de la Unidad 4 paso a paso.
- JWT Authentication (20 min):
- Configuración: Mostrar settings.py con SIMPLE_JWT configurado
- Login: POST /api/token/ con username/password → obtener access y refresh token
- Verificar token: POST /api/token/verify/ con token
- Refresh token: POST /api/token/refresh/ → obtener nuevo access token
- Usar token: GET /api/libros/ con header Authorization: Bearer {token}
- Token expirado: Esperar expiración o modificar tiempo → mostrar error 401
- Claims personalizados: Mostrar información adicional en el token
- OAuth 2.0 (20 min):
- Configuración: Mostrar django-oauth-toolkit en INSTALLED_APPS
- Crear aplicación OAuth en /o/applications/
- Flujo de autorización: Navegar a /o/authorize/ → obtener código
- Intercambiar código por token: POST /o/token/ → obtener access_token
- Usar token OAuth: Acceder a recursos con token en header
- Scopes: Demostrar permisos limitados (read, write)
- WebSockets (25 min):
- Configuración: Mostrar Channels en INSTALLED_APPS, ASGI_APPLICATION, CHANNEL_LAYERS
- Consumers: Mostrar código de NotificacionesConsumer y ChatConsumer
- Routing: Mostrar websocket_urlpatterns en routing.py
- Ejecutar con Daphne: daphne -p 8000 biblioteca_project.asgi:application
- Cliente JavaScript: Conectar a ws://localhost:8000/ws/chat/general/
- Enviar mensaje: Escribir en chat → ver mensaje en tiempo real
- Múltiples usuarios: Abrir 2 pestañas → enviar mensajes entre ellas
- Notificaciones: Actualizar libro → todos reciben notificación instantánea
- Desconexión: Cerrar pestaña → mostrar mensaje "usuario desconectado"
- GraphQL (25 min):
- Schema: Mostrar schema.py con Types, Queries y Mutations
- GraphiQL: Abrir http://127.0.0.1:8000/graphql/
- Query simple: { allLibros { id titulo } }
- Query con relaciones: { allLibros { titulo autor { nombre } categoria { nombre } } }
- Query con argumentos: { libro(id: 1) { titulo precio } }
- Query de búsqueda: { buscarLibros(titulo: "Cien") { id titulo } }
- Query con filtros: { librosDisponibles { titulo stock } }
- Mutation crear: mutation { crearAutor(nombre: "Gabriel", ...) { autor { id nombre } } }
- Mutation actualizar: mutation { actualizarStockLibro(libroId: 1, cantidad: 5) { libro { stock } mensaje } }
- Comparar con REST: Mostrar cómo 1 query GraphQL = múltiples endpoints REST
- Seguridad Avanzada (30 min):
- HTTPS: Mostrar configuración SECURE_SSL_REDIRECT, SECURE_HSTS en settings.py
- Rate Limiting: Configurar throttles.py → hacer múltiples requests → mostrar error 429 "Too Many Requests"
- Validaciones SQL Injection: Intentar entrada maliciosa ('; DROP TABLE--) → mostrar validación que previene
- Validaciones XSS: Intentar → mostrar sanitización
- CORS: Mostrar CORS_ALLOWED_ORIGINS en settings.py → intentar request desde origen no permitido → error
- CSRF: Mostrar CSRF_TRUSTED_ORIGINS → intentar POST sin token → error 403
- Headers de seguridad: Inspeccionar headers de respuesta (X-Content-Type-Options, X-Frame-Options, etc.)
- Password fuerte: Intentar crear usuario con password débil → mostrar validación
- Middleware personalizado: Mostrar SecurityMiddleware y RateLimitMiddleware en código
- API REST con Autenticación (15 min): CRUD completo de libros/autores usando JWT/OAuth para proteger endpoints
- Base de Datos MySQL (10 min):
- Mostrar tablas creadas: SHOW TABLES;
- Insertar 5 registros en cada tabla (Libros, Autores, Categorías, Préstamos) en local
- Verificar en MySQL Workbench o phpMyAdmin
- Repetir en producción (PythonAnywhere o similar)
- Integración Externa - Google Books API (15 min):
- Mostrar código external_services.py con GoogleBooksAPI
- Endpoint: POST /api/importar-google-books/ con ISBN
- Ejemplo: {"isbn": "9780142437247"} → importar datos del libro
- Mostrar respuesta con título, autor, descripción, portada obtenidos de Google Books
- Crear libro en base de datos con datos importados
- Testing Completo (20 min):
- Postman: Colección con todos los endpoints (JWT, OAuth, REST CRUD)
- GraphiQL: Ejecutar 10+ queries y mutations diferentes
- Cliente WebSocket: Página HTML con JavaScript conectando a WebSocket
- Navegador: Probar interfaz de admin, login, funcionalidades visuales
- Pruebas de seguridad: Rate limiting, validaciones, CORS
- Despliegue (15 min): Mostrar aplicación funcionando en producción (PythonAnywhere, Heroku, Railway) con URL pública
⏱️ Duración total estimada: 3-4 horas de demostración completa. El video debe ser continuo (puedes editarlo para quitar errores, pero debe verse como un flujo completo).
⚠️ REGLA OBLIGATORIA: Todos los nombres de cuentas y repositorios DEBEN contener TUS DOS APELLIDOS en cualquier parte.
📋 Requisitos de nomenclatura:
- Cuenta de GitHub: Debe incluir tus dos apellidos
- ✅ Ejemplos válidos:
pradodiaz,bernardo-prado-diaz,prado-diaz-dev - ❌ Ejemplos NO válidos:
bernardo123,developer2026,pradodev(falta un apellido)
- ✅ Ejemplos válidos:
- Nombre de cada Repositorio: Debe incluir tus dos apellidos
- ✅ Ejemplos válidos:
prado-diaz-apis-u2,practicas-prado-diaz,maps-pradodiaz - ❌ Ejemplos NO válidos:
practica-apis,unidad2,google-maps
- ✅ Ejemplos válidos:
- Cuenta de PythonAnywhere (si aplica): Debe incluir tus dos apellidos
- ✅ Ejemplos válidos:
pradodiaz,pradodiaz2026,bpradodiaz - ❌ Ejemplos NO válidos:
bernardo2026,student123,prado(falta un apellido)
- ✅ Ejemplos válidos:
- URLs de despliegue: Deben contener tus dos apellidos
- ✅ Ejemplo:
https://pradodiaz.github.io/practica1-maps-pradodiaz/ - ✅ Ejemplo:
https://pradodiaz.pythonanywhere.com
- ✅ Ejemplo:
⚠️ IMPORTANTE: Si tu cuenta o repositorios NO contienen tus DOS apellidos, deberás crear nuevas cuentas/repositorios con la nomenclatura correcta. No se aceptarán entregas que no cumplan esta regla.
Subir a Google Drive (con permisos de visualización pública) y adjuntar el enlace. Sin restricciones.
- Sube el o los videos a Google Drive en un solo Link, No por partes, Lo que se presente sera evaluado
- Subir Video en una sola Carpeta de DRIVE, unidad 3 y sus apellidos, ejemplo: Unidad 3-pradodiaz
- Clic derecho en el archivo → Obtener enlace
- Cambiar permisos a "Cualquier persona con el enlace puede ver"
- Copiar el enlace de la práctica y enviarlo a el Email de la Asignatura
- Enviarlo al Email: Tenor_Prado@yahoo.com.mx
- Escribiendo en Asunto: Apellido Paterno Apellido Materno Nombres Grupo Examen Práctica U3
- ejemplo: Prado Diaz Bernardo DSM5-1 Examen Práctica U3
- en el cuerpo del Email: Lo mismo Prado Diaz Bernardo DSM5-1 Examen Práctica U3, enlaces de GitHub, enlaces de las práctica desplegada y el enlace de Google DRIVE listo para ver video
⚠️ ADVERTENCIA FINAL - MUY IMPORTANTE
- El video ES OBLIGATORIO para la evaluación completa
- Debes aparecer TÚ en el video, no solo tu voz (cámara en esquina inferior derecha)
- Las 3 secciones de pantalla deben estar visibles simultáneamente
- Audio ALTO y CLARO - debe escucharse perfectamente
- Presentación inicial y despedida son OBLIGATORIAS
- Explicar mientras trabajas es OBLIGATORIO
- NO uses videos pregrabados de terceros
- Un solo video continuo - puedes editarlo pero debe ser uno solo
- GitHub, repositorios y PythonAnywhere DEBEN contener tus DOS APELLIDOS
- Si NO cumples CUALQUIERA de estas reglas: Video RECHAZADO y deberás rehacerlo completamente
🎯 OBJETIVOS DE APRENDIZAJE - UNIDAD 4
Al completar esta práctica de la Unidad 4: Integración de Servicios y Seguridad Avanzada, el estudiante será capaz de:
📚 Conocimientos Técnicos:
- ✅ JWT (JSON Web Tokens): Entender qué es un token, cómo se genera, cómo se valida y por qué es más seguro que las cookies tradicionales. Implementar autenticación stateless (sin estado) con access tokens y refresh tokens
- ✅ OAuth 2.0: Implementar "Login con Google/Facebook" y entender el flujo de autorización OAuth. Configurar aplicaciones OAuth, manejar códigos de autorización y tokens de acceso
- ✅ WebSockets: Crear conexiones bidireccionales para chat en tiempo real y notificaciones push. Entender diferencias entre HTTP polling y comunicación WebSocket asíncrona
- ✅ GraphQL: Consultar APIs de forma flexible obteniendo solo los datos que necesitas. Crear queries, mutations y entender ventajas vs REST (no over-fetching, no under-fetching)
- ✅ Seguridad Avanzada: Proteger aplicaciones contra los 10 ataques más comunes (SQL Injection, XSS, CSRF, DDoS, etc.) usando validaciones, sanitización y middleware de seguridad
- ✅ Rate Limiting: Evitar abuso de APIs limitando peticiones por usuario/IP usando throttling y cacheo con Redis
- ✅ CORS y CSRF: Configurar políticas de origen cruzado y protección contra falsificación de solicitudes entre sitios
- ✅ HTTPS y Headers de Seguridad: Forzar SSL/TLS, configurar HSTS, X-Frame-Options, Content-Security-Policy
- ✅ Integraciones Externas: Conectar aplicaciones con servicios externos como Google Books API, Stripe, SendGrid usando REST clients
- ✅ Arquitectura Moderna: Comprender arquitectura de aplicaciones web seguras orientadas a servicios con múltiples métodos de autenticación y comunicación
🛠️ Habilidades Prácticas:
- ✅ Desarrollar APIs listas para producción con autenticación robusta y múltiples métodos (Token, JWT, OAuth 2.0)
- ✅ Implementar funcionalidades en tiempo real sin recargar la página usando WebSockets y Channels
- ✅ Crear sistemas seguros que protejan datos de usuarios aplicando validaciones y sanitización
- ✅ Integrar múltiples tecnologías en un solo proyecto cohesivo (REST + SOAP + GraphQL + WebSockets)
- ✅ Documentar y desplegar aplicaciones profesionales con Docker y servicios cloud
- ✅ Utilizar herramientas de testing (Postman, GraphiQL, Selenium) para garantizar calidad
- ✅ Configurar middleware personalizado para seguridad y logging
- ✅ Implementar caching y optimización de rendimiento con Redis
- ✅ Debuggear problemas de autenticación, CORS, WebSockets usando logs y herramientas de desarrollo
- ✅ Seguir mejores prácticas de seguridad OWASP Top 10
💼 Competencias Profesionales:
- ✅ Portfolio: Tendrás un proyecto completo para mostrar a empleadores con tecnologías modernas de autenticación y comunicación en tiempo real
- ✅ Experiencia real: Habrás trabajado con tecnologías usadas en empresas como Netflix (GraphQL), Uber (WebSockets), Google (OAuth 2.0), Twitter (JWT)
- ✅ Resolución de problemas: Sabrás debuggear y solucionar errores comunes de autenticación, CORS, WebSockets, rate limiting
- ✅ Mejores prácticas: Seguirás estándares de la industria en arquitectura de seguridad y código limpio
- ✅ Certificación de conocimientos: Dominarás tecnologías que son requisitos en ofertas laborales de desarrollador backend/full-stack senior
🎓 Competencias Específicas de la Unidad 4:
- ✅ Implementar 3 tipos de autenticación en una misma aplicación (Token, JWT, OAuth 2.0)
- ✅ Crear chat y notificaciones en tiempo real con Django Channels y WebSockets
- ✅ Desarrollar API GraphQL completa con queries, mutations y subscriptions
- ✅ Aplicar medidas de seguridad de nivel empresarial (rate limiting, validaciones, HTTPS)
- ✅ Integrar servicios externos (Google Books, APIs de pago, email, etc.)
- ✅ Configurar CORS y CSRF para aplicaciones multi-origen de forma segura
- ✅ Proteger contra SQL Injection, XSS, CSRF, DDoS, Man-in-the-Middle attacks
- ✅ Implementar logging y monitoreo de seguridad con Django logging framework
- ✅ Desplegar aplicaciones seguras con SSL/TLS y headers de seguridad configurados
- ✅ Documentar APIs profesionalmente con Swagger/OpenAPI para GraphQL y REST
💻 REQUISITOS PREVIOS - UNIDAD 4
🌟 ESTA GUÍA ESTÁ DISEÑADA PARA COMPLETARSE PASO A PASO
La Unidad 4 se construye sobre las unidades anteriores. Asegúrate de haber completado:
- Unidad 1: Django + MySQL + GitHub básico ✅
- Unidad 2: API REST + Django REST Framework + Autenticación Token ✅
- Unidad 3: SOAP + Docker + Microservicios ✅
🧠 Conocimientos Previos Necesarios:
- 📝 Programación en Python: Funciones, clases, decoradores, async/await, comprensión de código asíncrono
- 🌐 Django Framework: Modelos, vistas, URLs, ORM, settings.py, middleware, serializers (de Unidad 2)
- 🔐 Conceptos de autenticación: Tokens, sesiones, diferencia entre autenticación y autorización, HTTP headers
- 🗄️ Bases de datos: SQL, MySQL, migraciones Django, relaciones ForeignKey, queries ORM
- 📡 APIs REST: HTTP methods (GET, POST, PUT, DELETE), JSON, endpoints, status codes (de Unidad 2)
- 🐳 Docker básico: Contenedores, imágenes, docker-compose (de Unidad 3)
- 🔧 Terminal/Consola: Ejecutar comandos, pip, Python, navegación de directorios
- 📁 Git y GitHub: Commits, push, pull, repositorios, .gitignore
- 🌐 Conceptos Web: CORS, CSRF, cookies, localStorage, WebSockets básicos
- 🔍 JavaScript básico: Para cliente WebSocket (fetch, async/await, WebSocket API)
💾 Software Necesario (Instalar en orden):
- Python 3.9-3.11 - Lenguaje principal (⚠️ NO Python 3.13, usar 3.11 recomendado)
- Django 4.2.7 - Framework web de Python
- MySQL 8.0+ - Base de datos relacional
- Redis 6.0+ - Para Channels (WebSockets) - NUEVO EN UNIDAD 4
- Django REST Framework 3.14.0 - Para APIs REST (de Unidad 2)
- SimpleJWT 5.3.0 - Autenticación JWT - NUEVO EN UNIDAD 4
- Django OAuth Toolkit 2.3.0 - OAuth 2.0 - NUEVO EN UNIDAD 4
- Django Channels 4.0.0 - WebSockets ASGI - NUEVO EN UNIDAD 4
- Daphne 4.0.0 - Servidor ASGI - NUEVO EN UNIDAD 4
- Graphene-Django 3.1.5 - GraphQL - NUEVO EN UNIDAD 4
- Git 2.x - Control de versiones
- VS Code - Editor recomendado con extensiones Python, Django
- Postman - Testing de APIs REST/OAuth - ESENCIAL
- Navegador moderno - Chrome/Firefox/Edge con DevTools
- Docker Desktop - Opcional para Redis en Windows
🌐 Herramientas y Cuentas Requeridas:
- GitHub (gratuita) - github.com - Control de versiones, debe incluir tus DOS apellidos en username
- Postman (gratuita) - postman.com - Testing de APIs REST, JWT, OAuth 2.0 - IMPRESCINDIBLE
- GraphiQL (incluido en Graphene) - Testing de GraphQL directamente en /graphql/
- PythonAnywhere (gratuita) - pythonanywhere.com - Deploy en producción
- Google Cloud Console (opcional) - console.cloud.google.com - Para OAuth con Google (crear credenciales OAuth 2.0)
- Redis (local o cloud) - Instalar localmente o usar RedisLabs (cloud gratuito)
📦 Bibliotecas Python Principales de la Unidad 4:
Comando completo para instalar todo:
pip install Django==4.2.7 \
djangorestframework==3.14.0 \
djangorestframework-simplejwt==5.3.0 \
django-oauth-toolkit==2.3.0 \
channels==4.0.0 \
channels-redis==4.1.0 \
daphne==4.0.0 \
graphene-django==3.1.5 \
mysqlclient==2.2.0 \
django-cors-headers==4.3.0 \
redis==5.0.1 \
requests==2.31.0 \
django-filter==23.5
Explicación de cada librería:
Django==4.2.7- Framework web principal (base de todo)djangorestframework==3.14.0- APIs REST (de Unidad 2)djangorestframework-simplejwt==5.3.0- JWT Authentication (access + refresh tokens)django-oauth-toolkit==2.3.0- OAuth 2.0 (login con Google/Facebook)channels==4.0.0- WebSockets (comunicación bidireccional asíncrona ASGI)channels-redis==4.1.0- Backend Redis para Channels (canal layer)daphne==4.0.0- Servidor ASGI (reemplaza runserver para WebSockets)graphene-django==3.1.5- GraphQL (queries y mutations flexibles)mysqlclient==2.2.0- Conector Python-MySQL (base de datos)django-cors-headers==4.3.0- CORS (Cross-Origin Resource Sharing)redis==5.0.1- Cliente Redis para Python (caching + Channels)requests==2.31.0- HTTP client para integración con Google Books APIdjango-filter==23.5- Filtros avanzados en API REST
🔧 Instalación de Redis (requerido para WebSockets):
Windows:
Opción 1 - Docker (recomendado):
docker run -d -p 6379:6379 redis:alpine
Opción 2 - Instalador MSI:
Descargar de: GitHub Redis para Windows
Mac:
brew install redis brew services start redis
Linux (Ubuntu/Debian):
sudo apt update sudo apt install redis-server -y sudo systemctl start redis sudo systemctl enable redis
Verificar Redis funcionando:
redis-cli ping # Debe responder: PONG
Escala de Calificación
| Puntos | Calificación | Nivel |
|---|---|---|
| 9.5-10.0 | ESTRATÉGICO | E |
| 8.50-9.49 | AUTÓNOMO | A |
| 7.5-8.49 | BÁSICO | B |
| 6.50-7.49 | RECEPTIVO | R |
| 0-6.49 | PREFORMAL | NA |
✅ LISTA DE VERIFICACIÓN FINAL - UNIDAD 4
Antes de Entregar tu Examen Práctico
🔐 JWT Authentication (Parte 1):
- SimpleJWT instalado: pip list muestra djangorestframework-simplejwt==5.3.0
- Configuración settings.py: REST_FRAMEWORK con SimpleJWT, ACCESS_TOKEN_LIFETIME, REFRESH_TOKEN_LIFETIME configurados
- URLs configuradas: /api/token/, /api/token/refresh/, /api/token/verify/ funcionando
- Login funcional: POST a /api/token/ con username/password devuelve access y refresh tokens
- Refresh token: POST a /api/token/refresh/ con refresh token devuelve nuevo access token
- Verify token: POST a /api/token/verify/ valida tokens correctamente
- Protección de endpoints: API REST requiere header Authorization: Bearer {token}
- Token expira: Después del tiempo configurado, token da error 401
- Claims personalizados: Token incluye información adicional del usuario
🔑 OAuth 2.0 (Parte 2):
- OAuth Toolkit instalado: django-oauth-toolkit en INSTALLED_APPS
- Migraciones aplicadas: python manage.py migrate oauth2_provider sin errores
- Aplicación OAuth creada: En /o/applications/ con client_id y client_secret
- Flujo de autorización: /o/authorize/ → código → /o/token/ → access_token funciona
- Token OAuth válido: Se puede usar para acceder a recursos protegidos
- Scopes configurados: read, write funcionan correctamente
🔄 WebSockets (Parte 3):
- Channels instalado: channels, channels-redis, daphne en requirements.txt
- Redis funcionando: redis-cli ping responde PONG
- ASGI configurado: asgi.py con ProtocolTypeRouter, ASGI_APPLICATION en settings.py
- CHANNEL_LAYERS configurado: Redis backend conectado correctamente
- Consumers creados: ChatConsumer y NotificacionesConsumer implementados
- Routing configurado: websocket_urlpatterns en routing.py
- Servidor ASGI corriendo: daphne -p 8000 biblioteca_project.asgi:application arranca sin errores
- Cliente WebSocket conecta: JavaScript se conecta a ws://localhost:8000/ws/chat/general/
- Mensajes en tiempo real: Enviar mensaje en una pestaña → aparece en otra instantáneamente
- Notificaciones funcionan: Actualizar libro → todos los clientes reciben notificación
📊 GraphQL (Parte 4):
- Graphene instalado: graphene-django en INSTALLED_APPS
- Schema creado: schema.py con Types, Query, Mutation definidos
- GRAPHENE settings: SCHEMA apuntando a 'libros.schema.schema'
- URL configurada: /graphql/ accesible y muestra GraphiQL interface
- Queries funcionan: allLibros, libro(id), buscarLibros(titulo) retornan datos correctos
- Mutations funcionan: actualizarStockLibro, crearAutor ejecutan y modifican DB
- Relaciones correctas: Query de libro incluye autor y categoría anidados
- Campos personalizados: estaDisponible y otros campos calculados funcionan
🛡️ Seguridad (Parte 5-7):
- HTTPS en producción: SECURE_SSL_REDIRECT, SECURE_HSTS configurados en settings.py
- Headers de seguridad: X-Content-Type-Options, X-Frame-Options, X-XSS-Protection en respuestas
- Validadores creados: validators.py con validar_isbn, prevenir_sql_injection, sanitizar_html
- Rate limiting: Throttling configurado, exceder límite devuelve 429 Too Many Requests
- Middleware de seguridad: SecurityMiddleware y RateLimitMiddleware activos
- CORS configurado: CORS_ALLOWED_ORIGINS con dominios permitidos
- CSRF protección: CSRF_TRUSTED_ORIGINS configurado, tokens funcionan
- Validación de entrada: Intentar SQL injection o XSS es bloqueado
- Passwords seguros: Validación de contraseña fuerte implementada
🔗 Integración Externa (Parte 8):
- Google Books API: external_services.py con GoogleBooksAPI implementado
- Endpoint de importación: POST /api/importar-google-books/ funciona con ISBN
- Datos correctos: Importar libro desde Google Books devuelve título, autor, descripción, portada
- Manejo de errores: ISBN no encontrado devuelve 404, timeout manejado correctamente
📋 General:
- Modelos Django: Libros, Autores, Categorías, Préstamos con relaciones correctas
- Base de Datos MySQL: Conexión funcionando, migraciones aplicadas, 5+ registros en cada tabla
- API REST completa: CRUD de libros/autores con autenticación JWT/OAuth
- requirements.txt: Todas las dependencias listadas con versiones exactas
- settings.py: Configurado correctamente para desarrollo y producción
- .gitignore: Excluye venv/, db.sqlite3, *.pyc, .env, secrets
- Repositorio Git: Commits organizados, readme.md explicativo
- Video completo: Demostración JWT + OAuth + WebSockets + GraphQL + Seguridad + Integración externa
- Deploy funcionando: Aplicación accesible en URL pública (PythonAnywhere, Heroku, Railway)
Entregables Mostrados en Video - Unidad 4
- Repositorio GitHub: Proyecto completo con código fuente de Unidad 4
- URL del repositorio:
https://github.com/apellido-apellido/biblioteca-u4-jwt-oauth-websockets-graphql - Debe contener: código Django completo, consumers.py, schema.py, validators.py, middleware.py, external_services.py, requirements.txt
- Nomenclatura obligatoria: repositorio debe incluir tus DOS apellidos y referencia a Unidad 4
- README.md explicando: cómo instalar Redis, configurar JWT, OAuth, WebSockets, GraphQL
- URL del repositorio:
- Estructura de Carpetas Unidad 4:
biblioteca_project/- Settings, ASGI, URLs principaleslibros/- App principal con models, views, serializers, consumers, schema, routinglibros/consumers.py- WebSocket consumers (Chat, Notificaciones)libros/schema.py- GraphQL schema (Types, Queries, Mutations)libros/routing.py- WebSocket URL routinglibros/validators.py- Validaciones de seguridadlibros/middleware.py- SecurityMiddleware, RateLimitMiddlewarelibros/throttles.py- Rate limiting personalizadolibros/external_services.py- Google Books API integrationtemplates/- HTML con cliente WebSocket JavaScriptstatic/- CSS, JavaScript para frontendrequirements.txt- Todas las dependencias de Unidad 4.env.example- Variables de entorno (SECRET_KEY, OAuth credentials)
- Archivos de Configuración Críticos:
settings.py- SIMPLE_JWT, OAUTH2_PROVIDER, GRAPHENE, CHANNEL_LAYERS, REST_FRAMEWORK throttling, CORSasgi.py- ProtocolTypeRouter con WebSocket supporturls.py- Endpoints /api/token/, /o/authorize/, /graphql/requirements.txt- djangorestframework-simplejwt, django-oauth-toolkit, channels, graphene-django, etc.
- Documentación Técnica:
README.md- Instalación paso a paso, configuración de Redis, JWT, OAuth, WebSockets, GraphQLARQUITECTURA.md- Diagrama de autenticación (Token vs JWT vs OAuth), flujo WebSocket, comparación REST vs GraphQLAPI_DOCS.md- Documentación de endpoints JWT, OAuth, GraphQL queries/mutationsSEGURIDAD.md- Medidas de seguridad implementadas (rate limiting, validaciones, CORS, CSRF, HTTPS)- Colección Postman exportada (.json) con todos los endpoints JWT, OAuth, REST
- Video de Demostración Completo: Enlace de Google Drive mostrando:
- Parte 1 - JWT (20 min): Login, obtención de access/refresh token, verify, uso en API, expiración, claims personalizados
- Parte 2 - OAuth 2.0 (20 min): Crear app OAuth, flujo de autorización, obtener código, intercambiar por token, usar token OAuth
- Parte 3 - WebSockets (25 min): Configuración Channels/Redis, consumers, routing, cliente JavaScript, chat en tiempo real entre 2 usuarios, notificaciones
- Parte 4 - GraphQL (25 min): Schema, queries simples/anidadas, mutations, comparación con REST, ventajas (no over-fetching)
- Parte 5 - Seguridad (30 min): Rate limiting (exceder límite → 429), validaciones SQL injection/XSS, CORS, CSRF, HTTPS headers
- Parte 6 - Integración Google Books (15 min): Importar libro por ISBN, datos obtenidos, crear en DB
- Parte 7 - Testing (20 min): Postman collection, GraphiQL queries, cliente WebSocket, navegador
- Parte 8 - Deploy (15 min): Aplicación funcionando en producción con URL pública
- Presentación inicial y cierre con nombre completo, grupo y resumen completo de tecnologías
- Email de Entrega:
- Enviar a:
Tenor_Prado@yahoo.com.mx - Asunto:
Apellido1 Apellido2 Nombre Grupo Examen Práctica U4 - Ejemplo:
Prado Diaz Bernardo DSM5-1 Examen Práctica U4 - Cuerpo del email:
- Nombre completo y grupo
- URL repositorio GitHub (con tus dos apellidos)
- URL aplicación desplegada en producción
- Enlace Google Drive con video (permisos públicos)
- Enlace a colección Postman (opcional pero recomendado)
- Credenciales de prueba (username/password para login)
- Enviar a:
🎓 CONCLUSIÓN - UNIDAD 4: INTEGRACIÓN Y SEGURIDAD
🌟 Al completar esta práctica de la Unidad 4 habrás dominado:
🔐 Autenticación Moderna:
- ✅ Implementado autenticación JWT (JSON Web Tokens) con access y refresh tokens
- ✅ Comprendido autenticación stateless (sin estado) vs sesiones tradicionales
- ✅ Configurado OAuth 2.0 para login con servicios externos (Google, Facebook)
- ✅ Dominado 3 métodos de autenticación en una misma aplicación (Token, JWT, OAuth)
- ✅ Protegido endpoints con permisos y autenticación personalizada
🔄 Comunicación en Tiempo Real:
- ✅ Implementado WebSockets con Django Channels y protocolo ASGI
- ✅ Creado chat en tiempo real con mensajes bidireccionales
- ✅ Desarrollado sistema de notificaciones push instantáneas
- ✅ Configurado Redis como channel layer backend
- ✅ Manejado conexiones/desconexiones de usuarios en tiempo real
- ✅ Comprendido diferencias entre HTTP polling y WebSocket
📊 APIs Flexibles con GraphQL:
- ✅ Creado API GraphQL completa con Graphene-Django
- ✅ Definido Types, Queries y Mutations personalizadas
- ✅ Eliminado over-fetching y under-fetching de datos
- ✅ Permitido a clientes solicitar exactamente los datos necesarios
- ✅ Comparado ventajas de GraphQL vs REST en casos reales
- ✅ Utilizado GraphiQL para documentación y testing interactivo
🛡️ Seguridad de Nivel Empresarial:
- ✅ Implementado rate limiting y throttling para prevenir abuso de API
- ✅ Protegido contra SQL Injection, XSS, CSRF con validaciones y sanitización
- ✅ Configurado CORS y CSRF correctamente para aplicaciones multi-origen
- ✅ Agregado headers de seguridad HTTPS (HSTS, X-Frame-Options, CSP)
- ✅ Validado todas las entradas de usuario con validators personalizados
- ✅ Creado middleware de seguridad personalizado
- ✅ Aplicado mejores prácticas de OWASP Top 10
🔗 Integración con Servicios Externos:
- ✅ Integrado Google Books API para importar datos de libros
- ✅ Manejado llamadas HTTP asíncronas con requests
- ✅ Parseado y transformado datos de APIs externas
- ✅ Implementado manejo robusto de errores (timeout, 404, 500)
🚀 Tecnologías Profesionales:
- ✅ Trabajado con Django Channels (WebSockets asíncronos)
- ✅ Utilizado Redis para caching y channel layers
- ✅ Configurado Daphne como servidor ASGI de producción
- ✅ Dominado testing con Postman, GraphiQL, clientes WebSocket
- ✅ Desplegado aplicaciones con WebSockets en producción
💼 Competencias Empresariales:
- ✅ Portfolio con proyecto full-stack moderno con autenticación avanzada
- ✅ Experiencia con tecnologías usadas por Google, Facebook, Netflix, Twitter
- ✅ Conocimiento de arquitecturas modernas (stateless auth, real-time communication)
- ✅ Habilidades de seguridad valoradas por empresas de tecnología
- ✅ Capacidad para construir aplicaciones escalables y seguras
📚 Recursos Adicionales - Unidad 4
Documentación Oficial:
- Django Documentation - Framework web principal
- Django REST Framework - APIs REST
- SimpleJWT Documentation - JWT Authentication
- Django OAuth Toolkit - OAuth 2.0 implementation
- Django Channels Documentation - WebSockets y ASGI
- Graphene-Django Documentation - GraphQL para Django
- Redis Documentation - Caching y channel layers
- MySQL Documentation - Base de datos
Tutoriales y Guías:
- JWT.io - Introduction to JSON Web Tokens
- OAuth 2.0 Official Site - Especificación completa
- MDN WebSockets API
- GraphQL Official Tutorial
- OWASP Top 10 - Top 10 security risks
- OWASP Cheat Sheet Series - Seguridad web
Herramientas de Testing:
- Postman - Testing de APIs REST, JWT, OAuth
- GraphiQL - IDE para GraphQL (incluido en Graphene)
- WebSocket Echo Test - Testing de WebSockets
- JWT.io Debugger - Decodificar y verificar JWT tokens
Conceptos Avanzados:
- Microservices by Martin Fowler
- The Twelve-Factor App - Metodología para apps modernas
- WebSocket with Nginx - Proxy WebSockets
- Apollo GraphQL - GraphQL client y server
Seguridad Web:
💡 Consejos Finales para Unidad 4
- Sigue la guía paso a paso - JWT → OAuth → WebSockets → GraphQL → Seguridad. Cada parte construye sobre la anterior
- Prueba cada componente antes de continuar:
- JWT: Verifica login, refresh, verify funcionan ANTES de OAuth
- OAuth: Crea app OAuth y obtén token ANTES de WebSockets
- WebSockets: Chat funcionando ANTES de GraphQL
- GraphQL: Queries y mutations ANTES de seguridad avanzada
- Redis es CRÍTICO para WebSockets - Asegúrate que redis-cli ping responda PONG antes de usar Channels
- Usa control de versiones inteligentemente:
- Commit después de cada parte funcionando (ej: "JWT implementado y probado")
- Nunca hagas commit de archivos sensibles (.env, secrets, passwords)
- Usa .gitignore para excluir venv/, .env, db.sqlite3, *.pyc
- Lee los logs cuando algo falle:
- JWT: Revisa expiración de tokens, SECRET_KEY configurado
- WebSockets: Logs de Daphne muestran conexiones/desconexiones
- GraphQL: Errores de schema en terminal al iniciar servidor
- Redis: redis-cli monitor para ver comandos en tiempo real
- Consulta la documentación oficial:
- SimpleJWT: Para configuración de tokens (lifetime, claims)
- Channels: Para entender consumers, routing, channel layers
- Graphene: Para tipos complejos, resolvers personalizados
- Testing es FUNDAMENTAL en Unidad 4:
- Crea colección Postman con TODOS los endpoints JWT/OAuth
- Guarda queries GraphQL en archivos .graphql para reutilizar
- Abre 2 pestañas para probar WebSocket chat entre usuarios
- Usa modo incógnito para simular usuarios diferentes
- Seguridad no es opcional:
- NUNCA hardcodees SECRET_KEY en código, usa variables de entorno
- Configura rate limiting DESDE EL INICIO para evitar abuso
- Valida TODAS las entradas de usuario, asume que son maliciosas
- En producción, SIEMPRE usa HTTPS (no HTTP)
- Documenta mientras construyes:
- README.md: Cómo instalar Redis, configurar JWT, iniciar WebSockets
- API_DOCS.md: Todos los endpoints con ejemplos de request/response
- Postman collection: Exporta y comparte con colegas/profesor
- Video de demostración:
- NO dejes para el último día - graba en secciones (JWT, OAuth, WebSockets)
- Practica ANTES de grabar definitivo - haz un video de prueba
- Asegúrate de mostrar PANTALLA + GUÍA + TU ROSTRO simultáneamente
- Audio FUERTE y CLARO - usa micrófono si es posible
- Explica MIENTRAS trabajas, no en silencio
- Respalda CONSTANTEMENTE:
- Push a GitHub después de cada parte funcionando
- Copia local de requirements.txt actualizado
- Export de base de datos MySQL con datos de prueba
- Guarda colección Postman y queries GraphQL
- Pide ayuda cuando la necesites:
- Si Redis no conecta después de 30 min → pide ayuda
- Si WebSocket no conecta después de 1 hora → pide ayuda
- Si GraphQL da errores de schema después de revisar docs → pide ayuda
- NO pierdas 5 horas en un error que alguien puede ayudarte en 5 minutos
- Experimenta y personaliza:
- Agrega claims personalizados a JWT (rol, permisos)
- Crea notificaciones WebSocket cuando se presta un libro
- Implementa subscriptions en GraphQL (avanzado)
- Conecta con otra API externa (Stripe, SendGrid)
- Preparación para el examen:
- Practica login JWT SIN mirar la guía - memoriza flujo
- Practica crear WebSocket consumer desde cero
- Practica escribir query GraphQL compleja en GraphiQL
- Conoce de memoria: rates de throttling, CORS origins, JWT lifetimes
🚀 ¡Éxito en tu práctica de la Unidad 4!
Esta es la unidad culminante del curso - Integración de JWT, OAuth 2.0, WebSockets, GraphQL y Seguridad Avanzada.
Esta práctica integral te prepara para el desarrollo de aplicaciones web modernas de nivel empresarial. Dominar estas tecnologías te abre puertas en el mercado laboral, ya que son herramientas utilizadas por:
- Netflix: GraphQL para APIs flexibles
- Uber: WebSockets para tracking en tiempo real
- Google/Facebook: OAuth 2.0 para autenticación
- Twitter: JWT para autenticación sin estado
- Slack: WebSockets para chat en tiempo real
- GitHub: GraphQL API v4
Tómate tu tiempo, comprende cada concepto (JWT, OAuth, WebSockets, GraphQL), y construye un proyecto del que te sientas orgulloso.
Al completar la Unidad 4, habrás dominado autenticación moderna, comunicación en tiempo real, APIs flexibles y seguridad de nivel empresarial.
Este conocimiento es una inversión en tu futuro profesional como desarrollador full-stack. ¡Disfruta el proceso de aprendizaje!
🎓 ¡Éxito en tu examen de la Unidad 4 y en el cierre del curso!