Autenticación, permisos y mixins: login_required, PermissionRequiredMixin, next/LOGIN_URL
Flujo de facturación: cabecera+detalle en JS, totales, edición, y transacciones (atomic)
Reportes, gráficos y PDFs (xhtml2pdf/WeasyPrint): filtros, agregaciones y JSON por POST
Acerca del curso online gratuito
Impulsa tus habilidades de desarrollo backend aprendiendo a construir una aplicación web completa con Python y Django 3, llevándola desde la configuración inicial hasta un proyecto funcional listo para usar en escenarios reales. Este curso online gratis está orientado a quienes quieren dominar el flujo de trabajo típico en proyectos profesionales: organizar un entorno de desarrollo, estructurar una aplicación con buenas prácticas y avanzar paso a paso hasta obtener un sistema con gestión de datos, interfaz dinámica y funcionalidades avanzadas.
A lo largo del recorrido trabajarás con la arquitectura de Django, el uso del ORM para interactuar con la base de datos y la creación de secciones clave dentro de una aplicación: administración, enrutamiento, vistas y templates. Además, podrás fortalecer tu experiencia construyendo listados eficientes con tablas avanzadas, configurando recursos estáticos y mejorando la experiencia del usuario con interacciones sin recarga gracias a Ajax.
El proyecto pone foco en el desarrollo de operaciones esenciales de cualquier sistema: crear, editar, eliminar y listar registros con formularios y validaciones, incluyendo personalización de interfaces y envío de información de forma asíncrona. También se abordan integraciones habituales en productos reales, como componentes de búsqueda y autocompletado, formularios con carga de archivos y selectores avanzados que mejoran la usabilidad en dashboards y paneles internos.
En la parte de gestión de acceso, aprenderás a implementar autenticación con vistas genéricas, control de sesiones y protección de rutas, además de manejar permisos, grupos y roles para construir un sistema más seguro y escalable. Complementarás esto con patrones reutilizables para validaciones, como mixins y decoradores, útiles para mantener el código limpio y consistente en aplicaciones en crecimiento.
Como cierre, el curso te guía para agregar características que elevan cualquier proyecto: generación de reportes, gráficos, exportación y restauración de datos, y creación de documentos PDF para casos como facturación. Verás cómo integrar estas salidas dentro de los flujos del sistema, preparando una base sólida para llevar tu propio proyecto a producción o enriquecer tu portafolio con una aplicación completa.
Si buscas una ruta práctica para consolidar Django con un enfoque de proyecto real, este curso te ayudará a conectar las piezas fundamentales del framework con herramientas comunes del ecosistema web, mejorando tu capacidad para desarrollar aplicaciones robustas en el ámbito de la programación y TI.
Contenido del curso
Lección en vídeo: Curso de Django 3 | Introducción del Curso | Video 100m
Lección en vídeo: Curso de Django 3 | Instalación de Python | Video 201m
Lección en vídeo: Curso de Django 3 | Instalación de Pycharm | Video 302m
Ejercicio: ¿Cuál es el beneficio principal mencionado de usar PyCharm para trabajar con Python y Django durante el curso?
Lección en vídeo: Curso de Django 3 | Creación de nuestro primer proyecto con Django | Video 403m
Lección en vídeo: Curso de Django 3 | Crear un proyecto con Django desde el cmd de windows | Video 509m
Ejercicio: ¿Qué comando se utiliza para crear el proyecto de Django desde la consola una vez instalado Django y activado el entorno virtual?
Lección en vídeo: Curso de Django 3 | Settings | Configurando nuestra base de datos SQLite | Video 610m
Lección en vídeo: Curso de Django 3 | Settings | Configurando nuestra base de datos PostgreSQL | Video 705m
Lección en vídeo: Curso de Django 3 | Models | Parte I | Video 825m
Lección en vídeo: Curso de Django 3 | Models | Parte II | Video 907m
Ejercicio: En Django, ¿qué ocurre cuando defines un campo ForeignKey con on_delete=models.CASCADE?
Lección en vídeo: Curso de Django 3 | ORM | Parte I | Video 1013m
Lección en vídeo: Curso de Django 3 | ORM | Parte II | Video 1108m
Ejercicio: En el ORM de Django, ¿qué lookup se utiliza para hacer una búsqueda que ignore mayúsculas/minúsculas (similar a LIKE pero case-insensitive)?
Lección en vídeo: Curso de Django 3 | Git | Control de versiones de tu código | Video 1211m
Lección en vídeo: Curso de Django 3 | Panel administrador | Create superuser | Video 1307m
Lección en vídeo: Curso de Django 3 | URLs | Configuración | Mi primera view | Video 1409m
Lección en vídeo: Curso de Django 3 | Templates | Parte I | Video 1507m
Lección en vídeo: Curso de Django 3 | Templates | Parte II | Video 1612m
Lección en vídeo: Curso de Django 3 | Archivos estáticos | Configuración | Video 1710m
Ejercicio: ¿Qué configuración se usa para indicarle a Django dónde buscar los archivos estáticos del proyecto (además de STATIC_URL)?
Lección en vídeo: Curso de Django 3 | Templates | Integrando la plantilla adminLTE3 | Video 1812m
Lección en vídeo: Curso de Django 3 | Creando nuestro primer listado en django | Video 1917m
Ejercicio: En un listado de categorías en Django, ¿qué se utiliza para renderizar una plantilla y enviarle el título y el queryset de categorías desde una vista basada en función?
Lección en vídeo: Curso de Django 3 | ListView | Vistas basadas en clases | Video 2009m
Lección en vídeo: Curso de Django 3 | ListView | Implementando datatables | Video 2113m
Ejercicio: Al integrar DataTables en un listado de Django, ¿qué se debe hacer en la plantilla base para poder cargar correctamente los archivos CSS/JS de la librería desde un template hijo?
Lección en vídeo: Curso de Django 3 | Sobreescritura del método dispatch | Vistas basadas en clases | Video 2205m
Lección en vídeo: Curso de Django 3 | Implementando decoradores | Vistas basadas en clases | Video 2303m
Ejercicio: ¿Cuál es el propósito principal de un decorador en Django/Python al trabajar con vistas basadas en clases?
Lección en vídeo: Curso de Django 3 | Sobreescritura del método post | Vistas basadas en clases | Video 2404m
Lección en vídeo: Curso de Django 3 | Ajax básico | post | Vistas basadas en clases | Video 2513m
Ejercicio: ¿Cuál es la principal ventaja de usar Ajax al enviar un POST a una vista basada en clases en Django?
Lección en vídeo: Curso de Django 3 | CreateView | Creando nuestro primer formulario | Parte I | Video 2615m
Lección en vídeo: Curso de Django 3 | CreateView | Personalizando nuestro formulario | Parte II | Video 2716m
Ejercicio: En Django, ¿qué mecanismo permite personalizar los atributos HTML (por ejemplo, class, placeholder, autocomplete) de los campos de un ModelForm de forma declarativa?
Lección en vídeo: Curso de Django 3 | CreateView | Validaciones en nuestro formulario | Parte III | Video 2818m
Lección en vídeo: Curso de Django 3 | CreateView | Implementando ajax para el envío de datos | Video 2925m
Ejercicio: En un formulario enviado por Ajax en Django, ¿para qué se agrega un campo oculto llamado "action"?
Lección en vídeo: Curso de Django 3 | UpdateView | Editando un registro | Video 3009m
Lección en vídeo: Curso de Django 3 | DeleteView | Eliminando un registro | Video 3106m
Ejercicio: En una vista basada en clase para eliminar (DeleteView) en Django, ¿para qué se configura el atributo success_url?
Lección en vídeo: Curso de Django 3 | DeleteView | Implementando ajax para el eliminar un registro | Video 3206m
Lección en vídeo: Curso de Django 3 | ListView | Cargar datos en mi tabla con ajax y datatable | Video 3317m
Ejercicio: En Django, al devolver una colección (lista) en un JsonResponse para cargar DataTables vía Ajax, ¿qué configuración es necesaria para que la respuesta no falle?
Lección en vídeo: Curso de Django 3 | Puliendo nuestro proyecto | Video 3403m
Lección en vídeo: Curso de Django 3 | TemplateView | Creando nuestro index | Video 3506m
Lección en vídeo: Curso de Django 3 | FormView | Vistas basadas en clases | Video 3611m
Lección en vídeo: Curso de Django 3 | LoginView | Vistas basadas en clases | Video 3716m
Ejercicio: En una implementación con la vista genérica LoginView, ¿qué configuración se usa para definir a qué URL redirigir tras un inicio de sesión exitoso?
Lección en vídeo: Curso de Django 3 | FormView | Inicio de sesión | Video 3805m
Lección en vídeo: Curso de Django 3 | LogoutView | RedirectView | Vistas basadas en clases | Video 3910m
Lección en vídeo: Curso de Django 3 | Validando nuestras vistas (login_required, next, LOGIN_URL) | Video 4007m
Lección en vídeo: Curso de Django 3 | Implementando alertas en nuestro formulario con jquery-confirm | Video 4109m
Ejercicio: ¿Cuál es el objetivo principal de integrar el plugin de alertas antes de ejecutar el envío con Ajax?
Lección en vídeo: Curso de Django 3 | Media Files | Parte I | Video 4212m
Lección en vídeo: Curso de Django 3 | Media Files con ajax | Parte II | Video 4310m
Ejercicio: Al enviar un formulario con archivos (imágenes) mediante Ajax en Django, ¿qué objeto se utiliza para incluir tanto campos de texto como de tipo file?
Lección en vídeo: Curso de Django 3 | Select anidados con ajax | Video 4416m
Lección en vídeo: Curso de Django 3 | Select anidados con select2 | Video 4512m
Ejercicio: Al usar Select2 para cargar datos en un
Lección en vídeo: Curso de Django 3 | Personalizando la clase User | Video 4609m
Lección en vídeo: Curso de Django 3 | Auditoria en mis modelos con django-crum | Video 4713m
Lección en vídeo: Curso de Django 3 | Modal | Creando un registro | Video 4816m
Lección en vídeo: Curso de Django 3 | Modal | Editando un registro | Video 4915m
Ejercicio: Al hacer clic en Editar dentro de una tabla con DataTables, ¿qué enfoque se usa para obtener la fila correcta y recuperar su data, evitando problemas cuando la tabla se vuelve responsiva?
Lección en vídeo: Curso de Django 3 | Modal | Eliminando un registro | Video 5004m
Lección en vídeo: Curso de Django 3 | Autocomplete con ajax | Video 5114m
Lección en vídeo: Curso de Django 3 | Autocomplete con select2 | Video 5206m
Lección en vídeo: Curso de Django 3 | Mixin | Vistas basadas en clases | Video 5307m
Ejercicio: ¿Cuál es la principal ventaja de usar un Mixin en Django para validar permisos (por ejemplo, que el usuario sea superusuario) en vistas basadas en clases?
Lección en vídeo: Curso de Django 3 | PermissionRequiredMixin | Validando permisos de usuario en mi vista | Video 5414m
Lección en vídeo: Curso de Django 3 | PermissionRequiredMixin | Messages en nuestros templates | Video 5507m
Lección en vídeo: Curso de Django 3 | Versión estable del proyecto | Video 5616m
Lección en vídeo: Curso de Django 3 | Maquetación de mi factura | Video 5724m
Lección en vídeo: Curso de Django 3 | Maquetación final y adaptación de plugins en mi factura | Video 5817m
Lección en vídeo: Curso de Django 3 | Agregando items a mi detalle de la venta | Video 5920m
Ejercicio: ¿Cuál es el objetivo de crear una estructura JavaScript (cabecera + detalle) y enviarla por Ajax en el flujo de una factura/venta?
Lección en vídeo: Curso de Django 3 | Calculando los totales de mi factura | Video 6012m
Lección en vídeo: Curso de Django 3 | Programando el evento cantidad del detalle de mi factura | Video 6115m
Ejercicio: Al modificar la cantidad en una fila del DataTable, ¿qué estrategia permite identificar qué producto del arreglo actualizar y luego recalcular la factura?
Lección en vídeo: Curso de Django 3 | Programando el evento eliminar del detalle de mi factura | Video 6211m
Lección en vídeo: Curso de Django 3 | Guardando los datos de mi factura | Video 6317m
Ejercicio: ¿Qué mecanismo de Django se utiliza para asegurar que, si ocurre un error al guardar el detalle de una factura, no se guarde tampoco la cabecera (rollback)?
Lección en vídeo: Curso de Django 3 | Consultando el detalle de mi venta | Modal | Video 6416m
Lección en vídeo: Curso de Django 3 | Consultando el detalle de mi venta | Child rows datatable | Video 6512m
Lección en vídeo: Curso de Django 3 | Programando el editar de mi factura | Video 6616m
Lección en vídeo: Curso de Django 3 | Agregando items a mi detalle de la venta | Select2 | Video 6711m
Lección en vídeo: Curso de Django 3 | Generando PDFs con Django usando xhtml2pdf | Parte I | Video 6812m
Lección en vídeo: Curso de Django 3 | Generando PDFs con Django usando xhtml2pdf | Parte II | Video 6913m
Ejercicio: ¿Para qué se declara la variable STATIC_ROOT en Django al trabajar con PDFs que incluyen imágenes/archivos estáticos?
Lección en vídeo: Curso de Django 3 | Agregando mi factura pdf en la creación de la venta | Video 7010m
Lección en vídeo: Curso de Django 3 | Generar reportes en Django | Parte I | Video 7125m
Ejercicio: ¿Qué enfoque se utiliza para filtrar ventas en la sección de reportes, evitando crear filtros separados por año, mes y rango de fechas?
Lección en vídeo: Curso de Django 3 | Generar reportes en Django | Parte II | Video 7215m
Lección en vídeo: Curso de Django 3 | Generar reportes en Django | Parte III | Video 7311m
Ejercicio: En Django, ¿qué combinación se usa para calcular la sumatoria de una columna (por ejemplo, subtotal) y evitar que el resultado sea None cuando no hay registros?
Lección en vídeo: Curso de Django 3 | Gráficos en Django | Parte I | Video 7416m
Lección en vídeo: Curso de Django 3 | Gráficos en Django | Parte II | Video 7516m
Ejercicio: En un gráfico implementado con Django y Ajax, ¿qué mecanismo se usa en la vista para responder con datos en formato JSON a una petición POST y decidir qué información devolver?
Lección en vídeo: Curso de Django 3 | Gráficos en Django | Parte III | Video 7606m
Lección en vídeo: Curso de Django 3 | Listar usuarios en Django | Video 7719m
Ejercicio: Al construir un listado de usuarios con Ajax en Django, ¿qué problema se debe considerar al usar model_to_dict para serializar el modelo?
Lección en vídeo: Curso de Django 3 | Creación de usuarios en Django | Video 7816m
Lección en vídeo: Curso de Django 3 | Edición de usuarios en Django | Video 7908m
Lección en vídeo: Curso de Django 3 | Eliminación de usuarios en Django | Video 8010m
Lección en vídeo: Curso de Django 3 | Mejoras en la creación y edición de usuarios en Django | Video 8116m
Ejercicio: ¿Cuál es la forma recomendada de mostrar el usuario autenticado en un template (por ejemplo, en el header) para evitar conflictos al editar usuarios?
Lección en vídeo: Curso de Django 3 | Grupos en Django | Parte I | Video 8212m
Lección en vídeo: Curso de Django 3 | Grupos en Django | Parte II | Video 8309m
Lección en vídeo: Curso de Django 3 | Perfiles dentro del dashboard del usuario | Parte I | Video 8407m
Lección en vídeo: Curso de Django 3 | Perfiles dentro del dashboard del usuario (SESIONES) | Parte II | Video 8516m
Lección en vídeo: Curso de Django 3 | Roles y permisos dentro del dashboard del usuario | Parte I | Video 8611m
Lección en vídeo: Curso de Django 3 | Roles y permisos dentro del dashboard del usuario | Parte II | Video 8709m
Lección en vídeo: Curso de Django 3 | Edición del perfil del usuario actual | Video 8810m
Lección en vídeo: Curso de Django 3 | Edición del password del usuario actual | Video 8910m
Ejercicio: Al implementar la edición de contraseña del usuario autenticado en Django, ¿qué acción se recomienda realizar después de cambiar el password para evitar inconsistencias de sesión?
Lección en vídeo: Curso de Django 3 | Envío de correos con Django | Parte I | Video 9015m
Lección en vídeo: Curso de Django 3 | Envío de correos con Django | Parte II | Video 9111m
Ejercicio: En Django, ¿qué combinación permite enviar un correo con cuerpo HTML generado desde una plantilla?
Lección en vídeo: Curso de Django 3 | Reseteo de contraseña de un usuario en Django | Parte I | Video 9218m
Lección en vídeo: Curso de Django 3 | Reseteo de contraseña de un usuario en Django | Parte II | Video 9319m
Ejercicio: En un flujo de reseteo de contraseña en Django con envío por Ajax, ¿qué validación se implementa en el formulario antes de enviar el correo?
Lección en vídeo: Curso de Django 3 | Reseteo de contraseña de un usuario en Django | Parte III | Video 9422m
Lección en vídeo: Curso de Django 3 | Reseteo de contraseña de un usuario en Django | Parte IV | Video 9508m
Lección en vídeo: Curso de Django 3 | Creación de un cliente dentro de la factura (Autocomplete) | Parte I | Video 9612m
Lección en vídeo: Curso de Django 3 | Creación de un cliente dentro de la factura (Modals) | Parte II | Video 9718m
Ejercicio: ¿Qué cambio se realizó para manejar correctamente el envío por Ajax al existir dos formularios (factura y cliente) en la misma página?
Lección en vídeo: Curso de Django 3 | Creación de un cliente dentro de la factura (Mejoras) | Parte III | Video 9810m
Lección en vídeo: Curso de Django 3 | Búsqueda de productos con modals en mi factura | Parte I | Video 9911m
Ejercicio: ¿Qué acción se programa al hacer clic en el botón Buscar productos dentro de la factura?
Lección en vídeo: Curso de Django 3 | Búsqueda de productos con modals en mi factura | Parte II | Video 10014m
Lección en vídeo: Curso de Django 3 | Búsqueda de productos con modals en mi factura | Parte III | Video 10111m
Ejercicio: En la búsqueda de productos con Select2, ¿qué validación se implementa para evitar que la opción de autocompletado (texto) se agregue al detalle como si fuera un producto real?
Lección en vídeo: Curso de Django 3 | Agregando el stock a mi modelo de Productos | Video 10209m
Lección en vídeo: Curso de Django 3 | Validaciones del stock en mis ventas | Parte I | Video 10316m
Ejercicio: En Django, ¿qué filtro se usa para traer solo productos cuyo stock sea mayor que 0 al momento de buscarlos en una venta?
Lección en vídeo: Curso de Django 3 | Validaciones del stock en mis ventas | Parte II | Video 10417m
Lección en vídeo: Curso de Django 3 | Generando PDFs en Django con weasyprint | Parte I | Video 10510m
Ejercicio: ¿Cuál es una ventaja clave de WeasyPrint al generar PDFs en un proyecto Python/Django frente a xhtml2pdf?
Lección en vídeo: Curso de Django 3 | Generando PDFs en Django con weasyprint | Parte II | Video 10612m
Lección en vídeo: Curso de Django 3 | Generando PDFs en Django con weasyprint | Parte III | Video 10707m
Ejercicio: Al generar un PDF de factura con WeasyPrint en Django, ¿qué ajuste permite que se carguen correctamente imágenes y otros archivos estáticos dentro de la plantilla HTML?
Lección en vídeo: Curso de Django 3 | Dumpdata y loaddata en Django (Exportar e importar datos) Parte I | Video 10812m
Lección en vídeo: Curso de Django 3 | Dumpdata y loaddata en Django (Exportar e importar datos) Parte II | Video 10909m
Ejercicio: Al importar datos a una nueva base de datos en Django usando loaddata, ¿qué paso ayuda a evitar conflictos con claves primarias autoincrementales?
Lección en vídeo: Curso de Django 3 | Creando mis modelos a partir de una base de datos actual (inspectdb) | Video 11003m