7.1 Guía Práctica: CRUD y Persistencia 🎬
Del modelo de datos al CRUD completo con formularios HTML puros, validación en servidor con request.POST y alertas con messages.
6 lecciones en video con fundamentos técnicos, código comentado y actividades de aplicación.
¿Cómo trabajar esta guía?
Revisa cada video y utiliza el material complementario para comprender qué ocurre en el modelo, la vista, la plantilla y el navegador. Reproduce los ejemplos en un proyecto Django y verifica cada resultado antes de avanzar. Las explicaciones complementan los temas de los videos; no son transcripciones de su contenido.
ProductoForm ni ModelForm. Construir los formularios directamente en HTML y procesar los datos con request.POST, validándolos en la vista.CRUD y persistencia de datos
Aprende a estructurar los datos y desarrollar las operaciones de consulta, creación, actualización y eliminación.
Modelo y base de datos
¿Qué aprenderás y por qué es importante?
El modelo constituye la estructura de información del sistema. Cada clase que hereda de models.Model representa una tabla; sus atributos representan columnas y cada objeto guardado corresponde a un registro. Django utiliza un ORM (mapeador objeto-relacional), que permite trabajar con Python en vez de escribir manualmente cada sentencia SQL.
Explicación técnica paso a paso
Antes de crear vistas o formularios, se deben definir los datos que necesita el negocio. En este ejemplo, cada producto tiene nombre, precio, stock y estado. Los tipos de campo determinan las validaciones básicas y el tipo de dato que se almacenará.
Ejemplo práctico · Python / Django
Ejemplo complementario · Comandos / HTML
makemigrations prepara los cambios del esquema y migrate los aplica a la base de datos. Registrar la aplicación en INSTALLED_APPS antes de ejecutar las migraciones.Categoria y relacionarlo con Producto mediante ForeignKey. Explicar por qué se usa on_delete=models.PROTECT.Administración con Django Admin
¿Qué aprenderás y por qué es importante?
Django Admin es una interfaz de gestión incluida con el framework. Permite consultar, crear, modificar y eliminar registros de modelos registrados, siempre que el usuario tenga permisos. Es una herramienta especialmente útil para pruebas, carga inicial y tareas administrativas internas. No reemplaza automáticamente la interfaz que utilizarán los usuarios finales.
Explicación técnica paso a paso
Para habilitar el modelo se registra en admin.py. Un ModelAdmin permite definir columnas, filtros y búsquedas. El administrador requiere que estén instaladas las aplicaciones de autenticación, sesiones y administración incluidas en la configuración estándar.
Ejemplo práctico · Python / Django
Ejemplo complementario · Comandos / HTML
Listar registros: SELECT, vista y tabla HTML
¿Qué aprenderás y por qué es importante?
La vista recibe una solicitud HTTP, consulta el modelo y construye el contexto que se entrega a una plantilla HTML. La plantilla presenta los resultados al usuario. Esta separación ayuda a mantener el acceso a datos en Python y la presentación en HTML.
Explicación técnica paso a paso
Producto.objects.all() genera un QuerySet. Es posible ordenarlo, filtrarlo o limitarlo antes de mostrarlo. En el HTML, el lenguaje de plantillas de Django permite recorrer cada registro con for y acceder a sus atributos. No se deben escribir consultas SQL dentro de la plantilla.
Ejemplo práctico · Python / Django
Ejemplo complementario · Comandos / HTML
urls.py y verificar que el nombre de la plantilla coincida. El bloque empty evita mostrar una tabla aparentemente rota cuando no existen registros.stock sea mayor que cero.Crear registros con formularios HTML y POST
¿Qué aprenderás y por qué es importante?
El método GET normalmente muestra la página y el formulario; POST envía datos al servidor para solicitar la creación del registro. La vista puede atender ambos métodos: en GET devuelve el formulario vacío y en POST lee, valida y guarda los valores. La operación de escritura nunca debe confiar ciegamente en los datos recibidos.
Explicación técnica paso a paso
Se utiliza request.POST.get() para obtener los campos del formulario. El nombre de cada input debe coincidir exactamente con la clave consultada. El token CSRF protege contra solicitudes falsificadas. Se recomienda convertir números dentro de un bloque try, comprobar rangos y redirigir después de guardar para evitar envíos duplicados al actualizar la página.
Ejemplo práctico · Python / Django
Ejemplo complementario · Comandos / HTML
ProductoForm ni ModelForm en este curso. La validación HTML mejora la experiencia, pero siempre debe repetirse en el servidor.Editar y eliminar registros
¿Qué aprenderás y por qué es importante?
Editar consiste en recuperar un objeto existente, mostrar sus valores actuales y guardar los cambios. Eliminar consiste en localizar un registro y borrarlo de forma explícita. Ambas acciones deben trabajar con un identificador único y controlar el caso en que el objeto solicitado no existe.
Explicación técnica paso a paso
get_object_or_404 devuelve una respuesta 404 cuando el registro no existe. En la edición, GET muestra el formulario precargado y POST actualiza el objeto. La eliminación debe confirmarse y ejecutarse mediante POST, no mediante un simple enlace GET, porque GET no debe producir cambios destructivos.
Ejemplo práctico · Python / Django
Ejemplo complementario · Comandos / HTML
editar.html se usan los mismos campos HTML del formulario de creación, con value="{{ producto.nombre }}" y valores equivalentes para precio y stock. La URL debe enviar pk a la vista.Mensajes de éxito, advertencia y error
¿Qué aprenderás y por qué es importante?
El framework de mensajes de Django permite mostrar avisos temporales después de una operación. Por ejemplo, al guardar un producto se muestra “Producto creado correctamente”; al eliminar, “Producto eliminado”. Los mensajes mejoran la claridad del flujo y permiten distinguir acciones exitosas de errores o advertencias.
Explicación técnica paso a paso
Los mensajes se agregan desde la vista y se leen desde la plantilla. Con la configuración habitual de Django, pueden mantenerse durante una redirección. Es importante distinguir un mensaje informativo de una validación: mostrar un mensaje de éxito no demuestra por sí solo que los datos sean correctos.
Ejemplo práctico · Python / Django
Ejemplo complementario · Comandos / HTML
django.contrib.messages, su middleware y su context processor estén habilitados. No exponer contraseñas ni datos sensibles en mensajes.Ponte a prueba — Parte 1 (CRUD)
Comprueba tu dominio de las lecciones 01 a 06 sobre modelos, consultas ORM, formularios HTML con request.POST, get_object_or_404 y el sistema de mensajes.


