En esta página:
Demo
En la parte anterior llamada Como crear un CRUD con Django 3.1 (Python 3.9) y Bootstrap 4.6 – Parte 2, configuramos el soporte de MySQL para Django, asimismo creamos el modelo con los campos para nuestra tabla llamada postres la cual usaremos para nuestro sistema CRUD, en este Post vamos a crear las vistas genericas que son necesarias para cargar las interfaces de la aplicación, vamos con ello.
Partes
Antes de continuar te invito a leer los siguientes artículos:
-
- Que es Django, Historia y tu primer Hola Mundo (Corregido: 31-05-2019)
- Conceptos Iniciales para desplegar Django
- Como usar Django y React JS (Método Manual, no Librería)
- Como crear un CRUD con Django 2 y Bootstrap 4 – Parte 1 (Python 3.7)
- 5 Servicios de Hosting VPS ideales para publicar un Proyecto Creado con Django
- Como Integrar Firebase en Django 3.0.7 – Parte 1
- 7 Proyectos que han sido Creados con Django Framework
- Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android – Parte 1
- Puedes leer más en la categoría Django
Asimismo, te invito a escuchar el Podcast: “En Cuanto Tiempo Puedo Ser Un Buen Programador ?”:
Spotify: | Sound Cloud: | Apple Podcasts |
Bien ahora continuemos con el Post: Como crear un CRUD con Django 3.1 (Python 3.9) y Bootstrap 4.6 – Parte 3.
Vistas Genéricas
El Framework Django trabaja sobre la arquitectura MTV que son las iniciales de Model Template View que traducido al español significa Modelo Plantilla Vista.
Cuando creamos este proyecto, Django nos generó un archivo llamado views.py en donde podemos definir las vistas y otras tares para nuestro proyecto. Django nos permite trabajar con vistas genéricas de su propio core, estas vistas genéricas nos permiten realizar de manera ágil ciertas tareas en nuestro proyecto sin escribir mucho código.
Las iniciales de CRUD son Create, Read, Update y Delete, por ende usaré las siguientes vistas genéricas:
- ListView
- DetailView
- CreateView
- UpdateView
- DeleteView
Abro el archivo llamado views.py que se encuentra en cruddjango31 > postres > views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/cruddjango31 ├── /cruddjango31 ├── /mientornovirtual ├── /postres ├── /__pycache__ ├── /migrations ├── /static ├── __init__.py ├── admin.py ├── apps.py ├── models.py ├── tests.py ├── views.py // Abro este archivo ├── db.sqlite3 ├── manage.py ├── mysqlclient-1.4.6-cp39-cp39-win_amd64.whl |
Dentro del archivo views.py voy a instanciar las vistas genéricas de Django y mi modelo Postres el cual configuramos dentro del archivo models.py en la Parte 2 de este tutorial:
1 2 3 4 5 6 7 8 9 10 |
from django.shortcuts import render # Instanciamos las vistas genéricas de Django from django.views.generic import ListView, DetailView from django.views.generic.edit import CreateView, UpdateView, DeleteView # Instanciamos el modelo 'Postres' para poder usarlo en nuestras Vistas CRUD from .models import Postres |
Paso seguido voy a instanciar 3 utilidades necesarias para este proyecto, estas son reverse, messages y forms. He colocado comentarios para explicar que hace cada una de ellas:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Nos sirve para redireccionar despues de una acción revertiendo patrones de expresiones regulares from django.urls import reverse # Habilitamos el uso de mensajes en Django from django.contrib import messages # Habilitamos los mensajes para class-based views from django.contrib.messages.views import SuccessMessageMixin # Habilitamos los formularios en Django from django import forms |
Ahora crearé unas clases para poder usar las vistas genéricas de Django: ListView, DetailView, CreateView, UpdateView y DeleteView.
Listado de Registros o Postres
Esta vista es para mostrar en una tabla de la vista principal, todos los registros almacenados en la base de datos del sistema CRUD. Creo una clase con el nombre PostresListado la cual usará la vista genérica ListView:
1 2 3 4 |
class PostresListado(ListView): model = Postres # Llamamos a la clase 'Postres' que se encuentra en nuestro archivo 'models.py' |
Ahora pasaré a crear las vistas para las tareas CRUD (CRUD son Create, Read, Update y Delete).
Crear (Create)
Creo una clase con el nombre PostreCrear que usará la vista genérica CreateView en donde mostraremos un formulario para crear un nuevo registro o postre, en el código colocare unos comentarios que explican para que sirve cada línea del código:
1 2 3 4 5 6 7 8 9 10 11 |
class PostreCrear(SuccessMessageMixin, CreateView): model = Postres # Llamamos a la clase 'Postres' que se encuentra en nuestro archivo 'models.py' form = Postres # Definimos nuestro formulario con el nombre de la clase o modelo 'Postres' fields = "__all__" # Le decimos a Django que muestre todos los campos de la tabla 'postres' de nuestra Base de Datos success_message = 'Postre Creado Correctamente !' # Mostramos este Mensaje luego de Crear un Postre # Redireccionamos a la página principal luego de crear un registro o postre def get_success_url(self): return reverse('leer') # Redireccionamos a la vista principal 'leer' |
Leer (Read)
Creo una clase con el nombre PostreDetalle que usará la vista genérica DetailView la cual se encargará de mostrar los detalles de un postre o registro:
1 2 3 4 |
class PostreDetalle(DetailView): model = Postres # Llamamos a la clase 'Postres' que se encuentra en nuestro archivo 'models.py' |
Actualizar (Update)
Creo una clase con el nombre PostreActualizar que usará la vista genérica UpdateView, en esta vista mostraremos un formulario para actualizar un postre o registro, obviamente de la Base de Datos. Asimismo en el código colocare unos comentarios que explican para que sirve cada línea del código:
1 2 3 4 5 6 7 8 9 10 11 |
class PostreActualizar(SuccessMessageMixin, UpdateView): model = Postres # Llamamos a la clase 'Postres' que se encuentra en nuestro archivo 'models.py' form = Postres # Definimos nuestro formulario con el nombre de la clase o modelo 'Postres' fields = "__all__" # Le decimos a Django que muestre todos los campos de la tabla 'postres' de nuestra Base de Datos success_message = 'Postre Actualizado Correctamente !' # Mostramos este Mensaje luego de Editar un Postre # Redireccionamos a la página principal luego de actualizar un registro o postre def get_success_url(self): return reverse('leer') # Redireccionamos a la vista principal 'leer' |
Eliminar (Delete)
Y por último creo una clase con el nombre PostreEliminar que hara uso de la vista genérica DeleteView, esta vista la usaremos para eliminar un registro o postre de nuestra base de datos, especificamente de la tabla postres:
1 2 3 4 5 6 7 8 9 10 11 12 |
class PostreEliminar(SuccessMessageMixin, DeleteView): model = Postres form = Postres fields = "__all__" # Redireccionamos a la página principal luego de eliminar un registro o postre def get_success_url(self): success_message = 'Postre Eliminado Correctamente !' # Mostramos este Mensaje luego de Editar un Postre messages.success (self.request, (success_message)) return reverse('leer') # Redireccionamos a la vista principal 'leer' |
Mencionar que el mensaje ‘Postre Eliminado Correctamente !’ de la Vista Genérica DeleteView de Django hasta la fecha de este tutorial no tiene soporte de mensajes mediante SuccessMessageMixin, entonces debo crear manualmente el mensaje de respuesta que se muestra al eliminar un postre o registro con messages.success (self.request, (success_message))
A continuación el código completo del archivo views.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
from django.shortcuts import render from django.views.generic import ListView, DetailView from django.views.generic.edit import CreateView, UpdateView, DeleteView from .models import Postres from django.urls import reverse from django.contrib import messages from django.contrib.messages.views import SuccessMessageMixin from django import forms class PostresListado(ListView): model = Postres class PostreDetalle(DetailView): model = Postres class PostreCrear(SuccessMessageMixin, CreateView): model = Postres form = Postres fields = "__all__" success_message = 'Postre Creado Correctamente !' # Mostramos este Mensaje luego de Crear un Postre # Redireccionamos a la página principal luego de crear un registro o postre def get_success_url(self): return reverse('leer') # Redireccionamos a la vista principal 'leer' class PostreActualizar(SuccessMessageMixin, UpdateView): model = Postres form = Postres fields = "__all__" success_message = 'Postre Actualizado Correctamente !' # Mostramos este Mensaje luego de Editar un Postre # Redireccionamos a la página principal luego de actualizar un registro o postre def get_success_url(self): return reverse('leer') # Redireccionamos a la vista principal 'leer' class PostreEliminar(SuccessMessageMixin, DeleteView): model = Postres form = Postres fields = "__all__" # Redireccionamos a la página principal luego de eliminar un registro o postre def get_success_url(self): success_message = 'Postre Eliminado Correctamente !' # Mostramos este Mensaje luego de Editar un Postre messages.success (self.request, (success_message)) return reverse('leer') # Redireccionamos a la vista principal 'leer' |
Bien, hasta aquí hemos creado las clases para las vistas genéricas que nos servirán para mostrar las vistas HTML del sistema CRUD.
Ten Paciencia, lo que quiero es que conozcas bien como se crea este proyecto y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje.
Nota (s)
- En la siguiente parte de este tutorial, crearé las rutas, organizaremos nuestra carpeta templates en donde colocaremos las vistas de las páginas HTML, desplegaremos Bootstrap y otra utilidad necesaria para nuestro sistema CRUD.
- Los pasos mencionados en este tutorial pueden cambiar en un futuro, esto no depende de nosotros si no de las empresas que dan soporte a Django y Python que suelen cambiar el orden y las opciones de sus tecnologías.
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.