En este tema, aprenderemos cómo Django maneja las solicitudes web mediante el enrutamiento de URL y las vistas. Estos son componentes esenciales para cualquier aplicación web, ya que determinan cómo se procesan y responden las solicitudes de los usuarios.
Conceptos Clave
- URLconf (URL Configuration): Es un archivo de configuración que mapea las URL a las vistas correspondientes.
- Vistas: Son funciones o clases que reciben una solicitud web y devuelven una respuesta.
Enrutamiento de URL
¿Qué es URLconf?
URLconf es un módulo de Python que contiene una lista de patrones de URL y las vistas correspondientes. Django utiliza este módulo para decidir qué vista debe llamar para una URL solicitada.
Configuración Básica de URLconf
- Archivo
urls.py
: Este archivo se encuentra en el directorio del proyecto y en cada aplicación. El archivourls.py
del proyecto principal suele incluir las URL de las aplicaciones.
# myproject/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('app/', include('myapp.urls')), # Incluye las URLs de la aplicación 'myapp' ]
- Archivo
urls.py
en la Aplicación: Cada aplicación puede tener su propio archivourls.py
para definir sus rutas específicas.
# myapp/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), # Mapea la URL raíz de la aplicación a la vista 'index' path('about/', views.about, name='about'), # Mapea la URL 'about/' a la vista 'about' ]
Ejemplo Práctico
Supongamos que tenemos una aplicación llamada myapp
y queremos definir dos rutas: una para la página de inicio y otra para la página "Acerca de".
- Definir las Vistas:
# myapp/views.py from django.http import HttpResponse def index(request): return HttpResponse("Bienvenido a la página de inicio") def about(request): return HttpResponse("Acerca de nosotros")
- Configurar las URLs:
# myapp/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('about/', views.about, name='about'), ]
- Incluir las URLs de la Aplicación en el Proyecto:
# myproject/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('app/', include('myapp.urls')), ]
Vistas
Vistas Basadas en Funciones (FBV)
Las vistas basadas en funciones son simplemente funciones de Python que reciben un objeto HttpRequest
y devuelven un objeto HttpResponse
.
# myapp/views.py from django.http import HttpResponse def index(request): return HttpResponse("Bienvenido a la página de inicio")
Vistas Basadas en Clases (CBV)
Las vistas basadas en clases proporcionan una forma más estructurada y reutilizable de manejar las solicitudes. Django ofrece varias vistas genéricas que pueden ser extendidas.
# myapp/views.py from django.views import View from django.http import HttpResponse class IndexView(View): def get(self, request): return HttpResponse("Bienvenido a la página de inicio")
Para usar una vista basada en clases, debes mapearla en urls.py
usando el método as_view()
.
# myapp/urls.py from django.urls import path from .views import IndexView urlpatterns = [ path('', IndexView.as_view(), name='index'), ]
Ejercicios Prácticos
Ejercicio 1: Crear una Nueva Vista y URL
- Objetivo: Crear una nueva vista llamada
contact
que devuelva el texto "Página de Contacto". - Pasos:
- Define la vista
contact
enviews.py
. - Añade una nueva ruta en
urls.py
que mapee la URLcontact/
a la vistacontact
.
- Define la vista
Solución:
# myapp/views.py from django.http import HttpResponse def contact(request): return HttpResponse("Página de Contacto")
# myapp/urls.py from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('about/', views.about, name='about'), path('contact/', views.contact, name='contact'), # Nueva ruta para la vista 'contact' ]
Ejercicio 2: Convertir una Vista Basada en Funciones a una Vista Basada en Clases
- Objetivo: Convertir la vista
about
a una vista basada en clases. - Pasos:
- Define una clase
AboutView
enviews.py
que extiendaView
. - Implementa el método
get
enAboutView
. - Actualiza
urls.py
para usarAboutView
.
- Define una clase
Solución:
# myapp/views.py from django.views import View from django.http import HttpResponse class AboutView(View): def get(self, request): return HttpResponse("Acerca de nosotros")
# myapp/urls.py from django.urls import path from .views import IndexView, AboutView urlpatterns = [ path('', IndexView.as_view(), name='index'), path('about/', AboutView.as_view(), name='about'), # Usar AboutView en lugar de la función 'about' ]
Conclusión
En esta sección, hemos aprendido cómo configurar el enrutamiento de URL en Django y cómo crear vistas tanto basadas en funciones como en clases. Estos conceptos son fundamentales para el desarrollo de aplicaciones web con Django, ya que permiten manejar las solicitudes de los usuarios y devolver las respuestas adecuadas.
En el próximo tema, exploraremos cómo trabajar con plantillas y archivos estáticos para mejorar la presentación de nuestras aplicaciones web.
Curso de Desarrollo Web con Django
Módulo 1: Introducción a Django
- ¿Qué es Django?
- Configuración del Entorno de Desarrollo
- Creando tu Primer Proyecto Django
- Entendiendo la Estructura del Proyecto Django
Módulo 2: Conceptos Básicos de Django
- Aplicaciones Django y Estructura del Proyecto
- Enrutamiento de URL y Vistas
- Plantillas y Archivos Estáticos
- Modelos y Bases de Datos
- Interfaz de Administración de Django
Módulo 3: Django Intermedio
- Manejo de Formularios
- Vistas Basadas en Clases
- Autenticación de Usuarios
- Middleware
- Carga de Archivos
Módulo 4: Django Avanzado
- Consultas Avanzadas con Django ORM
- Modelos de Usuario Personalizados
- Señales de Django
- Pruebas en Django
- Optimización del Rendimiento