4. Vistas y URLs: Profundización
Class-Based Views (CBVs)
Las Vistas Basadas en Clases son una forma poderosa de escribir vistas en Django, permitiendo reutilizar código y organizar la lógica de manera orientada a objetos.
Ventajas de las CBVs
- Reutilización de código: A través de la herencia y Mixins.
- Vistas Genéricas: Django incluye vistas para tareas comunes (listar, ver detalle, crear, editar, borrar).
Vistas Genéricas Comunes
- ListView: Muestra una lista de objetos.
- DetailView: Muestra los detalles de un solo objeto.
- CreateView / UpdateView / DeleteView: Manejan formularios para editar datos.
Ejemplo de Implementación (ver src/conceptos_basicos/views.py)
from django.views.generic import ListView, DetailView
from .models import Curso
class CursoListView(ListView):
model = Curso
template_name = "conceptos_basicos/curso_list.html" # Plantilla a usar
context_object_name = "cursos" # Nombre de la variable en el template
def get_queryset(self):
"""Podemos sobrescribir este método para filtrar datos."""
return Curso.objects.filter(fecha_inicio__year=2023)
class CursoDetailView(DetailView):
model = Curso
# Busca por 'pk' o 'slug' automáticamente
Configuración de URLs para CBVs
Para usar una CBV en urls.py, debemos llamar al método .as_view().
# urls.py
from .views import CursoListView, CursoDetailView
urlpatterns = [
path('cursos/', CursoListView.as_view(), name='curso_list'),
path('curso/<slug:slug>/', CursoDetailView.as_view(), name='curso_detail'),
]
Mixins
Los Mixins son clases que aportan funcionalidad extra a una vista.
* LoginRequiredMixin: Requiere que el usuario esté logueado.
* PermissionRequiredMixin: Requiere permisos específicos.
from django.contrib.auth.mixins import LoginRequiredMixin
class CursoCreateView(LoginRequiredMixin, CreateView):
model = Curso
fields = ['titulo', 'descripcion']