Django
Tutorial Django: Vistas y ViewSets
Django: Introducción a las Vistas en Django. Aprende a gestionar la lógica y presentación de datos en Django con vistas. Desarrolla aplicaciones de manera eficiente
Aprende Django y certifícateIntroducción a las Vistas en Django
Las vistas en Django son una pieza clave del framework, ya que se encargan de gestionar la lógica que determina qué datos se presentarán al usuario y cómo se presentarán. Una vista es esencialmente una función o clase de Python que recibe una solicitud HTTP y devuelve una respuesta HTTP adecuada.
Cuando un usuario realiza una petición a una URL específica, el sistema de enrutamiento de Django dirige esa petición a la vista correspondiente. Las vistas interactúan con los modelos para acceder y manipular datos, y utilizan plantillas para renderizar el contenido que se enviará al cliente. Este proceso permite separar la lógica de negocio de la presentación, siguiendo el principio de separación de responsabilidades.
Por ejemplo, consideremos una vista simple que muestra un mensaje de bienvenida en una biblioteca en línea:
from django.http import HttpResponse
def saludo(request):
return HttpResponse("Bienvenido a la biblioteca en línea")
En este ejemplo, la función saludo es una vista que recibe la solicitud del usuario y devuelve una respuesta con el texto "Bienvenido a la biblioteca en línea". La función HttpResponse se utiliza para generar la respuesta HTTP que se enviará al cliente.
Las vistas pueden manejar diferentes métodos HTTP como GET, POST, PUT y DELETE, lo que permite crear aplicaciones web dinámicas y complejas. Además, pueden procesar parámetros de la URL, datos de formularios y gestionar excepciones, proporcionando así una gran flexibilidad en el manejo de las interacciones usuario-servidor.
Para que una vista sea accesible, es necesario registrarla en el archivo urls.py de la aplicación. Esto implica asociar una ruta URL específica con la vista correspondiente:
from django.urls import path
from .views import saludo
urlpatterns = [
path('saludo/', saludo, name='saludo'),
]
En este caso, estamos asignando la ruta saludo/ a la vista saludo, lo que permite que, al acceder a esa URL, se ejecute la lógica definida en la vista.
Introducción a Django REST Framework (DRF) y ViewSets
Django REST Framework (DRF) es una herramienta que extiende las capacidades de Django para construir API RESTful. DRF proporciona una serie de componentes y abstracciones que facilitan la creación de servicios web que pueden consumir aplicaciones web y móviles, permitiendo la interacción con los datos de forma estructurada y segura.
Uno de los componentes clave en DRF son los ViewSets, que son clases que encapsulan la lógica común de las vistas basadas en clases de Django. Los ViewSets simplifican la implementación de operaciones CRUD al agrupar acciones como list
, create
, retrieve
, update
y destroy
en una sola clase. Esto reduce la cantidad de código repetitivo y mejora la mantenibilidad de la aplicación.
Por ejemplo, en una aplicación de biblioteca, se puede crear un ViewSet para el modelo Libro
que maneje todas las operaciones necesarias:
from rest_framework import viewsets
from .models import Libro
from .serializers import LibroSerializer
class LibroViewSet(viewsets.ModelViewSet):
queryset = Libro.objects.all()
serializer_class = LibroSerializer
En este ejemplo, LibroViewSet
hereda de ModelViewSet
, proporcionando automáticamente las acciones para listar, crear, recuperar, actualizar y eliminar instancias de Libro
. La propiedad queryset
define los objetos que estarán disponibles a través de la API, y serializer_class
especifica el serializador que se utilizará para convertir las instancias de modelo a y desde formatos como JSON.
Al registrar el ViewSet en las rutas de la aplicación, se pueden exponer los endpoints de la API sin necesidad de definir explícitamente cada URL:
from rest_framework import routers
from .views import LibroViewSet
router = routers.DefaultRouter()
router.register(r'libros', LibroViewSet)
urlpatterns = router.urls
El uso de un enrutador de DRF permite generar automáticamente las rutas para las acciones del ViewSet, facilitando la configuración y reduciendo la probabilidad de errores. Los endpoints generados proporcionarán las operaciones estándar de REST:
GET /libros/
para listar todos los libros.POST /libros/
para crear un nuevo libro.GET /libros/{id}/
para recuperar un libro específico.PUT /libros/{id}/
para actualizar completamente un libro.PATCH /libros/{id}/
para actualizar parcialmente un libro.DELETE /libros/{id}/
para eliminar un libro.
Además, DRF proporciona una documentación interactiva de la API y soporte para múltiples formatos de respuesta, lo que mejora la experiencia de desarrollo y la usabilidad de la API.
Diferencias entre APIView y ViewSet
En Django REST Framework (DRF), tanto APIView como ViewSet son herramientas fundamentales para construir APIs, pero se diferencian en su enfoque y funcionalidad. Comprender estas diferencias es crucial para seleccionar la opción más adecuada según las necesidades de desarrollo.
APIView
La APIView es una clase base que permite definir vistas basadas en funciones para manejar solicitudes HTTP. Proporciona un control detallado sobre los métodos HTTP (GET
, POST
, PUT
, PATCH
, DELETE
) y es ideal cuando se requiere personalizar el comportamiento de cada acción.
Por ejemplo, una APIView para gestionar libros podría ser:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Libro
from .serializers import LibroSerializer
class LibroAPIView(APIView):
def get(self, request):
libros = Libro.objects.all()
serializer = LibroSerializer(libros, many=True)
return Response(serializer.data)
def post(self, request):
serializer = LibroSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Con APIView, se define explícitamente cada método, lo que proporciona una gran flexibilidad para personalizar la lógica de negocio y el manejo de las respuestas.
ViewSet
El ViewSet es una clase que agrupa de manera lógica un conjunto de vistas relacionadas con un modelo, simplificando las operaciones CRUD. Permite reducir el código repetitivo al proporcionar implementaciones genéricas para las acciones comunes (list
, create
, retrieve
, update
, destroy
).
Un ejemplo de ViewSet para el mismo modelo Libro
sería:
from rest_framework import viewsets
from .models import Libro
from .serializers import LibroSerializer
class LibroViewSet(viewsets.ModelViewSet):
queryset = Libro.objects.all()
serializer_class = LibroSerializer
El ModelViewSet proporciona automáticamente todas las acciones necesarias sin necesidad de definir cada método individualmente, lo que mejora la eficiencia en el desarrollo.
Principales diferencias
Nivel de control: APIView ofrece un control más detallado sobre cada método HTTP, permitiendo personalizaciones específicas. ViewSet, en cambio, sigue las convenciones estándar de REST, facilitando la implementación de operaciones comunes con menos código.
Enrutamiento: Al usar APIView, es necesario definir manualmente las rutas en el archivo urls.py
. Con ViewSet, se utilizan routers que generan automáticamente las rutas basadas en las acciones disponibles.
Ejemplo con APIView:
from django.urls import path
from .views import LibroAPIView
urlpatterns = [
path('libros/', LibroAPIView.as_view(), name='libros'),
]
Ejemplo con ViewSet:
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import LibroViewSet
router = DefaultRouter()
router.register(r'libros', LibroViewSet)
urlpatterns = [
path('', include(router.urls)),
]
Simplicidad vs. Personalización: ViewSet simplifica la creación de APIs siguiendo patrones RESTful, mientras que APIView permite una personalización profunda, siendo más adecuado para casos en los que se requiere una lógica específica que se aparta de los patrones estándar.
Cantidad de código: Con APIView, se escribe más código al tener que definir cada método, lo que puede ser beneficioso para personalizaciones. ViewSet reduce el código repetitivo al proporcionar acciones predeterminadas, lo que acelera el desarrollo.
¿Cuál elegir?
Use APIView cuando:
Se necesita un manejo específico y personalizado de los métodos HTTP.
Los endpoints requieren lógica compleja o no estándar.
Se desea un control granular sobre cada acción.
Use ViewSet cuando:
Se busca rapidez en el desarrollo siguiendo patrones REST comunes.
Los endpoints realizan operaciones CRUD estándar.
Se prefiere minimizar el código repetitivo y aprovechar las utilidades de los routers.
La elección entre APIView y ViewSet dependerá de las necesidades del proyecto. APIView es ideal para implementaciones que requieren una lógica personalizada y detallada, mientras que ViewSet es óptimo para crear APIs de forma rápida y siguiendo estándares, con menos código y mayor consistencia.
Todas las lecciones de Django
Accede a todas las lecciones de Django y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Django
Introducción Y Entorno
Instalación Y Configuración Django Con Venv
Introducción Y Entorno
Arquitectura De Un Proyecto Django
Introducción Y Entorno
Base De Datos Mysql En Django
Modelos Y Base De Datos
Creación De Modelos
Modelos Y Base De Datos
Asociaciones De Modelos
Modelos Y Base De Datos
Migraciones
Modelos Y Base De Datos
Operaciones Crud Y Consultas
Modelos Y Base De Datos
Enrutamiento Básico
Vistas Y Plantillas
Plantillas Con Django Template Language
Vistas Y Plantillas
Vistas Basadas En Funciones
Vistas Y Plantillas
Vistas Basadas En Clases
Vistas Y Plantillas
Middlewares
Vistas Y Plantillas
Form Vs Modelform
Formularios
Procesamiento De Formularios
Formularios
Subida De Archivos
Formularios
Api Rest Con Django Rest Framework
Api Rest
Serializadores
Api Rest
Vistas Y Viewsets
Api Rest
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender el rol y funcionamiento de las vistas en Django.
- Distinguir cómo las vistas interactúan con modelos y plantillas.
- Implementar vistas utilizando funciones y clases.
- Registrar vistas en el archivo urls.py para su acceso.
- Explorar el manejo de métodos HTTP en vistas Django.