Las views en Django son funciones o clases que gestionan las solicitudes (requests) que hace un usuario y devuelven las respuestas (responses) correspondientes. Las vistas son el enlace entre los modelos (base de datos) y las plantillas (HTML), permitiendo renderizar datos dinámicos en páginas web.
Una view es una función de Python o una clase que recibe una solicitud web (request), procesa los datos necesarios, y devuelve una respuesta (response), que generalmente incluye un HTML renderizado, un JSON o una redirección. Las vistas son fundamentales en el patrón MVC (Modelo-Vista-Controlador) de Django, siendo el "controlador" que define la lógica de negocio.
Django ofrece dos enfoques para definir vistas: funciones y clases.
Las vistas basadas en funciones (FBV) son simples y fáciles de entender. Se definen como funciones que reciben un objeto request
y devuelven un HttpResponse
.
Ejemplo:
from django.http import HttpResponse
def mi_vista(request):
return HttpResponse("¡Hola, mundo!")
Las vistas basadas en clases (CBV) son más reutilizables y modulares. Django ofrece clases genéricas para las operaciones más comunes, como mostrar listas o manejar formularios.
Ejemplo de vista basada en clase:
from django.views import View
from django.http import HttpResponse
class MiVista(View):
def get(self, request):
return HttpResponse("¡Hola desde una vista basada en clase!")
Django también ofrece vistas genéricas, que simplifican operaciones comunes como mostrar detalles de un objeto o listar elementos.
Ejemplo:
from django.views.generic import ListView
from .models import Persona
class ListaPersonasView(ListView):
model = Persona
template_name = 'personas_lista.html'
1. Renderizar una plantilla en una vista basada en función:
from django.shortcuts import render
def inicio(request):
return render(request, 'inicio.html')
2. Vista con datos del modelo:
from django.shortcuts import render
from .models import Persona
def lista_personas(request):
personas = Persona.objects.all()
return render(request, 'personas.html', {'personas': personas})
3. Vista basada en clase para detalles de un objeto:
from django.views.generic import DetailView
from .models import Persona
class PersonaDetalleView(DetailView):
model = Persona
template_name = 'persona_detalle.html'
Para más detalles sobre las vistas en Django, visita la documentación oficial de Django.
Jorge García
Fullstack developer