Montando una web sencilla con Django (parte 3 y final)

Estos últimos días he estado publicando post al respecto de como montar una pequeña web con Django, más como ejercicio y ejemplo de como funcionan las plantillas y como mostrar los contenidos que otra cosa.

Todo respondió a una pregunta que me hicieron desde Linkedin, sobre eso precisamente, si podía mostrar un ejemplo.

En los anteriores post, hemos visto como publicar los contenidos de la web directamente desde la plantilla html y en otra ocasión, como centralizar el contenido desde la vista, para usar un único fichero html para toda la web.

En esta ocasión y para terminar esta serie de tutoriales, post o como le quieras llamar, vamos a ver como recoger los contenidos que se van a mostrar en la web, desde una base de datos.

La estructura general del proyecto, no cambia en exceso, pero si hemos de hacer algunas modificaciones para poder montar la base de datos y poder trabajar con ella.

Vamos a por ello

Por defecto, Django trae incluido un gestor de BD sencillo SQLite3, pero totalmente funcional y que servirá sin ninguna duda para nuestro propósito.

Lo primero que vamos a hacer es, desde una terminal, crear un usuario administrador, que nos permita poder acceder al backend del proyecto y trabajar con los datos. Esto es muy sencillo usando

python manage.py createsuperuser

Deberemos responder a varias preguntas, como el nombre del usuario, la contraseña y un correo.

Hecho esto, crearemos las tablas mediante

python manage.py makemigrations
python manage.py migrate

De esta forma, una vez arrancado el proyecto podremos acceder mediante la url del mismo, al área de adminstración, en nuestro caso y dado que estamos trabajando en local accederemos a http://127.0.0.1:8000/admin, donde un formulario de login nos pedirá las credenciales que hemos creado antes

Una vez validados, podremos acceder a la gestión de los usuarios en este caso, pues no hay ninguna otra tabla creada de momento en nuestro proyecto

Creando el modelo de datos

Ahora llega el momento de volver a nuestro código y crear el modelo de datos que nos servirá para gestionar las páginas de nuestro sitio web.

Un modelo datos, no es más que una definició de una tabla, pero Django nos permite crearlo desde el código, cosa que hará más manejable la modificación de esta tabla.

En concreto, hemos de acceder al fichero principal/models.py y cargar el siguente código:

De esta manera, definimos una tabla llamada Pagina, con dos campos: nombre y contenido. Nada más complejo de momento.

Ahora, para poder ver y gestionar los datos desde el backend de Django, necesitamos incluirla en el admin, de esta forma

Ahora volveremos nuevamente a una terminal y ejecutaremos las migraciones correspondientes para que se creen las tablas y las vistas en el admin

python manage.py makemigrations
python manage.py migrate

De esta forma, si volvemos al admin de Django podremos ver

Y si accedemos al modelo de Paginas, podremos cargar, editar, borrar, etc. nuevos contenidos. En el ejemplo que nos ocupa, hemos creado tres registros: inicio, contacto y error, suficiente para nuestro ejemplo.

Modificando las vistas

Ahora restará modificar la forma en que la vista del proyecto, está mostrando las páginas.

En vez de tener acceso a unos contenidos definidos directamente en la plantilla o en la misma vista, vamos a acceder a ellos a través de la base de datos y usando la tabla Pagina. Veamos como quedaría la vista

Este método, recoge el nombre de la página que le pasamos desde la url (principal/urls.py)

y busca en la tabla Pagina la coincidencia entre ese nombre que el pasamos y algún registro dentro de esa tabla. Cuando lo encuentra, carga el contenido en el contexto y lo envía a la plantilla pagina.html para mostrarlo, igual que en los ejemplos anteriores.

Si intentamos acceder a una página que no existe, nos muestra el contenido cargado en el registro error

El fichero principal/urls.py, en este caso, está configurado para poder tratar las urls que vengan vacias, como si fueran la página de inicio. Así pues, si llamamos a http://127.0.0.1:8000/, lo gestionará como si fuera http://127.0.0.1:8000/inicio/

Nada más. Hasta aquí esta serie de publicaciones sobre el tema. Como siempre, os dejo el contenido del código en mi repositorio de GitHub y os animo a hacer vuestras propias pruebas sobre este código.

Publicada el
Categorizado como Desarollo Etiquetado como

Por Jose Manuel Sanz Prieto

Desarrollador web. En este blog hablo de fotografía, programación con Django, Python, PHP y privacidad.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *