Organiza y escala tus endpoints en Django Rest Framework con un refactor claro: pasa de vistas basadas en funciones a vistas basadas en clases (APIView) y luego simplifica con vistas genéricas como ListApiView y CreateApiView. Verás cómo el código se vuelve más limpio, reutilizable y fácil de mantener sin perder control.
¿Por qué migrar de funciones a vistas basadas en clases en Django Rest Framework?
Las vistas basadas en clases permiten agrupar lógica por método HTTP y aprovechar funcionalidades nativas de DRF. Además, simplifican la configuración de métodos permitidos, permisos y throttle, y añaden soporte automático a HEAD y OPTIONS.
Estructura clara: métodos get, post, put, delete separados por función.
Escalabilidad real: reutilización con herencia y clases padre.
Validación automática:allowed methods limita respuestas a los métodos definidos.
Más herramientas listas: permisos y throttle disponibles cuando se necesiten.
Mejor experiencia de cliente:HEAD obtiene solo headers rápidamente. OPTIONS informa campos y métodos disponibles.
¿Cómo refactorizar ApiView a clases en DRF?
Primero, importa la clase y crea tu vista basada en clases. Luego define los métodos HTTP y conecta la URL con as_view.
¿Cómo declarar la clase y métodos get/post?
from rest_framework.views import ApiView
classListPatientsView(ApiView): allowed_methods =['GET','POST']defget(self, request):# Copia la lógica de listado que usabas en la vista basada en función.passdefpost(self, request):# Copia la lógica de creación del recurso patient.pass
Idea clave:allowed methods valida qué métodos responderán.
Beneficio: el recurso lista queda expresivo: GET lista, POST crea.
La interfaz navegable de DRF mostrará además HEAD y OPTIONS automáticamente.
¿Cómo convertir el detalle con get/put/delete?
from rest_framework.views import ApiView
classDetailPatientView(ApiView): allowed_methods =['GET','PUT','DELETE']defget(self, request, pk):# Recupera y retorna el paciente por pk.passdefput(self, request, pk):# Actualiza el paciente por pk.passdefdelete(self, request, pk):# Elimina el paciente por pk.pass
Al refactorizar notarás duplicación de consultas para obtener el objeto.
Señal de mejora: extraer una función auxiliar o pasar a vistas genéricas.
¿Qué simplifican las vistas genéricas ListApiView y CreateApiView?
Las vistas genéricas ya traen implementados los métodos estándar de REST. Solo defines serializerClass y QuerySet, y DRF se encarga del resto. Así reduces tu vista de lista y creación a pocas líneas.
serializerClass: indica cómo serializar y validar los datos.
QuerySet: especifica de dónde obtener los elementos a listar o crear.
Efecto inmediato: puedes borrar el get y el post manuales.
Además, en la interfaz navegable puedes alternar entre HTML form y raw data para enviar JSON; DRF incluso muestra un datetime picker para fechas. Si más adelante necesitas personalizar comportamiento, ya sabes qué método sobrescribir porque entendiste el flujo manual primero.
Habilidades prácticas: refactor paso a paso, herencia múltiple de vistas genéricas, eliminación de duplicación, uso de la interfaz navegable para probar endpoints.
¿Te animas a dar el siguiente paso? Implementa el detalle con vistas genéricas y comparte tu código en comentarios para recibir feedback.