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

  1. URLconf (URL Configuration): Es un archivo de configuración que mapea las URL a las vistas correspondientes.
  2. 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

  1. Archivo urls.py: Este archivo se encuentra en el directorio del proyecto y en cada aplicación. El archivo urls.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'
]
  1. Archivo urls.py en la Aplicación: Cada aplicación puede tener su propio archivo urls.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".

  1. 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")
  1. 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'),
]
  1. 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

  1. Objetivo: Crear una nueva vista llamada contact que devuelva el texto "Página de Contacto".
  2. Pasos:
    • Define la vista contact en views.py.
    • Añade una nueva ruta en urls.py que mapee la URL contact/ a la vista contact.

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

  1. Objetivo: Convertir la vista about a una vista basada en clases.
  2. Pasos:
    • Define una clase AboutView en views.py que extienda View.
    • Implementa el método get en AboutView.
    • Actualiza urls.py para usar AboutView.

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.

© Copyright 2024. Todos los derechos reservados