Vistas en Django: Funciones vs Clases y su Implementación
Resumen
Las vistas son un componente crucial en Django, permitiendo la interacción entre las URLs y la lógica de negocio.
¿Cómo crear vistas en Django?
Para mantener el código organizado, es ideal ubicar las vistas en un archivo dedicado. Si tienes vistas definidas en el archivo de URLs, el primer paso es moverlas al archivo views.py. Asegúrate de renombrar las vistas si tienen nombres duplicados y de importar las dependencias necesarias, como HttpResponse.
¿Cómo manejar vistas basadas en funciones?
Las vistas basadas en funciones (FBV) son simples de implementar y adecuadas para lógica no compleja. Reciben el objeto request y devuelven un HttpResponse. Aquí un ejemplo básico:
from django.http import HttpResponse
defMyTestView(request):return HttpResponse("Hello, this is a test view")
¿Cómo explorar el objeto request en Django?
El objeto request en Django contiene información relevante sobre la solicitud HTTP. Para explorar sus atributos, puedes utilizar el shell de Django:
from django.http import HttpRequest
request = HttpRequest()print(request.__dict__)
Esto te permitirá inspeccionar las propiedades del request, como el método HTTP, el usuario autenticado, entre otros.
¿Por qué usar vistas basadas en clases?
Las vistas basadas en clases (CBV) facilitan la reutilización de código y la modularidad. Son más adecuadas para lógica compleja y permiten utilizar métodos integrados de Django. Para convertir una vista basada en funciones a una basada en clases:
Define una clase que herede de una vista genérica de Django.
Implementa métodos como get_context_data para manejar el contexto.
Asegúrate de importar las vistas desde el módulo correcto. Utiliza el autocompletado del editor con precaución y verifica los importes en la documentación de Django.
¿Cuáles son las diferencias clave entre FBV y CBV?
FBV: Simplicidad y facilidad de implementación para tareas básicas.
CBV: Modularidad y reutilización, ideal para lógica compleja y uso de métodos predefinidos.
Profe Luis, una recomendación o simplemente un comentario que considero importante: Una vez digas que resolvamos algo en una clase como mejora a la solución, pues debe resolverla usted también y mostrarla rápidamente en la clase posterior, de tal forma que aporte al conocimiento y mas importante aún que la aplicación que vemos en pantalla cuando explica no quede desactualizada y mejore la experiencia al estudiante en el aprendizaje.
En este caso en particular mira que el car_list todavía lo obtiene de una lista de diccionarios quemada y no de la BD sqlite como ya debería ir el ejercicio.
3 cosas:
1) Estoy parcialmente de acuerdo contigo. Proporcionar la solución puede ser bueno para los alumnos que más batallan con los ejercicios. Sin embargo, creo que estás viendo cómo usar Django, ya debes tener las bases sólidas de la programación bien entendidas, así como lo básico del frontend.
2) El punto es practicar y acostumbrarse a investigar y desbloquear la creatividad para resolver los problemas tú mismo
3) Hoy en día ya tenemos herramientas de IA que nos pueden asistir en los retos.
¡Hola! Estaba viendo esta clase y me quedaron dudas de como django encontraba el contexto para renderizar con la plantilla, ¿Por qué llamarlo get_context_data? La respuesta es porque al crear la clase CarListView, esta hereda de TemplateView, que a su vez, hereda de TemplateResponseMixin, ContextMixin y View, ContextMixin es la clase que tiene ese get_context_data y le dice que renderizar
En Django, puedes crear vistas basadas en funciones (Function-Based Views, FBVs) o en clases (Class-Based Views, CBVs). Ambas tienen propósitos específicos y son útiles en diferentes contextos.
Vistas Basadas en Funciones (FBVs)
Son funciones simples que reciben una solicitud (request) y devuelven una respuesta (HttpResponse). Son más directas y fáciles de entender para tareas pequeñas y personalizadas.
Ventajas de FBVs:
Simplicidad: Fáciles de escribir y entender para tareas específicas.
Flexibilidad: Puedes personalizar cada aspecto sin la estructura impuesta por las clases.
Ideal para vistas pequeñas: Cuando la lógica de la vista es sencilla.
Vistas Basadas en Clases (CBVs)
Son clases que representan vistas. Django ofrece vistas genéricas que implementan tareas comunes como listar, crear, actualizar o eliminar registros. Puedes extender estas clases o crear las tuyas propias.
Ventajas de CBVs:
Reutilización de código: Usar vistas genéricas reduce la necesidad de repetir lógica común.
Extensibilidad: Puedes heredar y personalizar métodos según sea necesario.
Organización: La estructura de las CBVs es más clara en proyectos grandes
Mi recomendación aquí es que se acostumbren a utilizar clases, ya que en un entorno empresarial organizado siempre las vamos a ver entonces es importante irnos familiarizando con estas mismas.
Las vistas basadas en clases (CBV) brillan cuando tu proyecto empieza a crecer. Imagina que tienes diez secciones diferentes en tu sitio web que necesitan mostrar una lista de elementos de la base de datos. Si usas funciones, tendrías que escribir la lógica de consulta y renderizado diez veces.
Al usar clases, puedes aprovechar el concepto de herencia de la programación orientada a objetos. Django ya te proporciona clases preconstruidas (como TemplateView o ListView) que manejan todo el trabajo pesado por detrás. Solo necesitas definir un par de variables, como el modelo que quieres consultar o el nombre del archivo HTML a renderizar. Esto hace que tu código sea mucho más limpio, modular y fácil de mantener. Además, si necesitas integrar herramientas de terceros, como un sistema de autenticación con redes sociales, la mayoría de estas librerías ya vienen empaquetadas como clases listas para ser integradas en tu proyecto.
📚 Nombre de la clase
Vistas basadas en clases en Django
🎯 Idea principal
Django permite crear vistas usando clases en lugar de funciones. Las Class-Based Views (CBV) permiten organizar mejor la lógica, reutilizar código y aprovechar la programación orientada a objetos para manejar solicitudes HTTP de forma más estructurada.
⚡ Síntesis en 10 segundos
Django permite crear vistas con clases (CBV).
Las vistas basadas en clases organizan mejor la lógica.
Facilitan reutilización y herencia de código.
Permiten manejar métodos HTTP como GET y POST dentro de la clase.
Son útiles para aplicaciones más complejas.
🔑 Puntos clave
Vistas basadas en clases
Alternativa a las vistas basadas en funciones que usa programación orientada a objetos.
Organización del código
Permiten estructurar la lógica en métodos dentro de una clase.
Manejo de solicitudes HTTP
Las clases pueden manejar diferentes tipos de solicitudes mediante métodos específicos.
Reutilización mediante herencia
Se pueden extender o reutilizar comportamientos heredando de otras vistas.
Mayor escalabilidad
Las CBV facilitan mantener aplicaciones grandes con lógica más estructurada.
🧠 Conceptos importantes
Class-Based View (CBV)
Vista implementada como una clase que maneja solicitudes web.
Vista basada en función (FBV)
Vista definida como una función simple que recibe una solicitud y devuelve una respuesta.
Herencia
Principio de programación orientada a objetos que permite reutilizar comportamiento de una clase base.
Métodos HTTP
Operaciones que representan acciones del cliente, como GET o POST.
🧩 Modelo mental de la clase
Solicitud del usuario
↓
Django dirige la solicitud a una vista basada en clase
↓
La clase identifica el método HTTP correspondiente
↓
Se ejecuta el método de la clase
↓
Se genera la respuesta
Las clases permiten organizar múltiples comportamientos dentro de una sola estructura lógica.
🚀 Acciones inmediatas
Identificar vistas que manejan múltiples comportamientos.
Reestructurar esas vistas usando clases.
Separar la lógica en métodos según el tipo de solicitud.
Aprovechar la herencia para reutilizar comportamientos comunes.
💼 Aplicación profesional
Las vistas basadas en clases son útiles en proyectos reales para:
manejar formularios complejos
construir CRUD completos
estructurar endpoints de APIs
reutilizar lógica entre múltiples vistas
Permiten mantener el código más organizado en aplicaciones grandes.
🔥 Hacks para la comunidad
Usar vistas basadas en funciones para lógica simple.
Usar vistas basadas en clases cuando la vista crece en complejidad.
Aprovechar la herencia para evitar repetir lógica entre vistas.
Mantener cada vista con una responsabilidad clara.
📝 Reflexión estratégica
Las vistas basadas en clases reflejan una evolución natural hacia arquitecturas más estructuradas y escalables.
Cuando los proyectos crecen, organizar la lógica mediante clases permite mantener el código más limpio, reutilizable y preparado para cambios futuros.
Aunque soy nuevo en Django, hoy vi la clase y me quedaron dudas sobre cómo pasar un parámetro a través del request. Al parecer, es necesario crear una función dentro de la clase. Pienso que cada clase tendría varias funciones asociadas, y estas se enviarían, en los casos respectivos a diferentes templates.
Los siguientes convertidores de ruta están disponibles de forma predeterminada:
str- Coincide con cualquier cadena que no esté vacía, excepto el separador de ruta '/'. Este es el valor predeterminado si no se incluye un convertidor en la expresión.
int- Coincide con cero o cualquier entero positivo. Devuelve un int.
slug- Coincide con cualquier cadena de caracteres que conste de letras o números ASCII, además de los caracteres de guión bajo y guion bajo. Por ejemplo, building-your-1st-django-site.
uuid- Coincide con un UUID formateado. Para evitar que varias URL se asignen a la misma página, se deben incluir guiones y las letras deben estar en minúscula. Por ejemplo, 075194d3-6885-417e-a8a8-6c931e272f00. Devuelve una UUID")instancia.