Introducción a Django creando un blog muy simple

Vistas y urls

Todo lo que hemos hecho hasta ahora no ha implicado todavía el manejo de peticiones y respuestas.

Las peticiones son las diferentes URL que los clientes piden ver, por ejemplo / es la portada y /blog/ podría ser nuestro blog.

Para manejar estas peticiones Django utiliza el siguiente flujo:

  • El cliente hace la petición a una dirección definida en el urls.py.
  • Esa dirección está enlazada a una vista, una función definida en el fichero views.py y que contiene la lógica que procesará la petición, como por ejemplo consultar el modelo Post para ver qué entradas hay en la base de datos.
  • Por último esos datos se renderizarán sobre un template HTML y se enviarán al cliente para que éste vea el resultado de la petición.

Este flujo de trabajo se conoce en Django como patrón MVT (Modelo - Vista - Template) y nos permite separar muy bien cada proceso de los demás.

Para ver todo esto en acción vamos a programar la vista de nuestra portada y devolviendo un simple texto plano:

blog/views.py

from django.shortcuts import render, HttpResponse

def home(request):
    return HttpResponse("Bienvenido a mi blog")

Ahora tenemos que enlazar esta vista a una URL para poder hacer la petición:

tutorial/urls.py

from django.contrib import admin
from django.urls import path
from blog.views import home

urlpatterns = [
    path('', home),
    path('admin/', admin.site.urls),
]

Tan simple como esto y si accedemos a la raíz de nuestro sitio ya deberíamos ver como se devuelve el texto plano que devolvemos.

Sin embargo la gracia es renderizar un template HTML bien estructurado, así que vamos a crear uno para nuestra portada.

Prestad mucha atención, para crear un template dentro de la app blog tenemos que crear un directorio templates en la app y dentro otro directorio llamado con el mismo nombre que la app, en nuestro caso blog.

Se hace de esta forma porque Django carga en memoria todos los directorios templates de las apps unificándolos en el mismo sitio.

En cualquier caso dentro ya podremos crear nuestra plantilla HTML para renderizarla:

templates/blog/home.html

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Blog</title>
</head>
<body>
    <h1>Bienvenidos a mi blog</h1>
</body>
</html>

Por último vamos a cambiar la vista para en lugar de devolver el texto plano renderice esta plantilla HTML que hemos creado:

blog/views.py

from django.shortcuts import render, HttpResponse

def home(request):
    return render(request, "blog/home.html")

Listo, ya hemos completado la parte de la vista y el template. En la siguiente lección incorporaremos una consulta a la base de datos a través del modelo Post y devolveremos las entradas al template para renderizarlas.