En la entrada anterior, dimos una introducción básica a Django. En esta entrada crearemos una aplicación simple, que nos dará una cita aleatoria de los Simpson cuando accedemos a ella mediante un navegador. Esto nos permitirá ver en funcionamiento las piezas del mecanismo de Django que más adelante usaremos para servir datos.
En primer lugar, debemos instalar la librería de Django, si no está ya instalada en nuestro sistema. Para ello lo podemos instalar con pip install django. Las dependencias se instalarán automáticamente.
A continuación elegimos dónde crear el proyecto que contendrá la aplicación (y opcionalmente, otras aplicaciones relacionadas). Navegaremos a este directorio usando una terminal (CMD en Windows), y creamos el proyecto:
django-admin startproject SQproject
Esto creará un directorio nuevo que contiene una serie de ficheros. manage.py es un script que usaremos para administrar (crear aplicaciones, ejecutar el servidor, etc) el proyecto. El directorio SQproject contiene ficheros de configuración, siendo el principal settings.py. De momento, no cambiaremos la configuración por defecto. Volveremos a este fichero para cambiar cosas como la base de datos de soporte, las applicaciones middleware (tales como Django REST framework), etc. El fichero urls.py contiene un mapeo entre URLs y las vistas.
Una vez creado el proyecto contenedor, podemos crear la estructura de una aplicación nueva ejecutando python manage.py startapp SQapp. Esto creará un nuevo directorio llamado SQapp, que contiene una serie de ficheros de los cuales, de momento, sólo necesitamos conocer los ficheros models.py (que contiene las clases que representan los datos que maneja la aplicación) y views.py (que contiene las funciones que procesan las peticiones de los clientes).
El primer paso será crear los modelos. Dado que esta aplicación tiene un modelo de datos muy simple (citas), el contenido de models.py será muy simple:
from django.db import models class CitaSimpsons(models.Model): contenido = models.TextField() personaje = models.CharField(max_length=100) temporada = models.IntegerField() capitulo = models.IntegerField()
La clase hereda de models.Model, y tiene cuatro propiedades: contenido y personaje, que son cadenas de texto, y temporada y capitulo que son campos numéricos.
Una vez creada la aplicación, editamos el fichero settings.py. Debemos buscar la declaración de una lista llamada INSTALLED_APPS, y añadir nuestra aplicación para activarla:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'SQapp', ]
Con el modelo creado, podemos empezar a crear los datos, pero antes debemos crear la base de datos. Vovlemos a la terminal y ejecutamos python manage.py migrate. Una vez que la base de datos ha sido creada (en un fichero SQLite llamado db.sqlite3), debemos rellenarla. Podemos hacer esto de dos maneras; o bien usando la interfaz de administración (en ese caso, necesitamos crear un usuario con python manage.py createsuperuser, ejecutar el servidor como se indica más adelante, y acceder a la interfaz de administración a través de un navegador), o lanzando una terminal de Python preconfigurada para nuestro proyecto mediante la ejecución de python manage.py shell. En la terminal que se abre, ejecutamos lo siguiente:
>>> from SQapp.models import CitaSimpsons >>> q1 = CitaSimpsons(contenido="Un servidor da la bienvenida a nuestros nuevos amos.", personaje="Kent Brockman", temporada=5, capitulo=15) >>> q1.save() >>> q2 = CitaSimpsons(contenido="Hijos, lo intentásteis al máximo y fracasásteis. La lección es: no os esforcéis.", personaje="Homer Simpson", temporada=5, capitulo=18) >>> q2.save() >>> q3 = CitaSimpsons(contenido="A mí no me mires, nena. Yo voté a Kodos.", personaje="Homer Simpson", temporada=8, capitulo=1) >>> q3.save() >>> q4 = CitaSimpsons(contenido="El aliento de mi gato huele a comida de gato.", personaje="Ralph Wiggum", temporada=6, capitulo=2) >>> q4.save() >>> q5 = CitaSimpsons(contenido="La vida es un fracaso tras otro, hasta que acabas deseando que se muera Flanders.", personaje="Homer Simpson", temporada=5, capitulo=13) >>> q5.save() >>> quit()
Ya tenemos datos que servir… así que ahora trabajaremos en servirlos. Para ello debemos crear una vista, así que editamos el fichero SQapp/views.py añadiendo lo siguiente:
from django.http import HttpResponse from SQapp.models import CitaSimpsons def citaAleatoria(request): cita = CitaSimpsons.objects.order_by('?').first() respuesta = '\"' + cita.contenido + '\" ' + cita.personaje + ' (T' + str(cita.temporada) + 'C' + str(cita.capitulo) + ')' return HttpResponse(respuesta)
La vista toma una entrada de la base de datos de forma aleatoria. Importamos CitaSimpsons y usamos el ORM de Django para acceder a las entradas (objects). Ordenamos de forma aleatoria y tomamos la primera entrada. Después, extraemos cada campo y lo usamos para rellenar una cadena de texto simple. Finalmente, creamos un objeto HttpResponse con el contenido de la cadena, y lo devolvemos (lo que se traduce en que lo enviamos al cliente). En este caso no hemos usado para nada los contenidos de la petición del usuario (request), lo cual dejamos para entradas futuras.
Debemos hacer esta vista visible para el mundo exterior mediante la asignación de una URL. Editamos el fichero SQproject/urls.py y cambiamos sus contenidos:
from django.conf.urls import url from django.contrib import admin from SQapp.views import citaAleatoria urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^cita/', citaAleatoria), ]
Importamos la vista y añadimos una línea a urlpatterns para asignar la URL cita/ a nuestra vista. Hay una URL asignada previamente, que corresponde a la interfaz de administración de nuestro proyecto.
Ya está todo hecho. Lanzamos el servidor de desarrollo ejecutando el comando python manage.py runserver en la terminal. El servidor se iniciará normalmente en el puerto 8000. Lanzamos un navegador y accedemos a http://127.0.0.1:8000/cita/ para obtener nuestra cita aleatoria de los Simpson.
Si bien este ha sido un ejemplo de aplicación muy simple, nos da una idea de cómoo comenzar un proyecto y añadir los componentes básicos. El totorial de Django nos lleva paso a paso por el proceso de una forma más detallada y pausada. En la siguiente entrada, añadiremos interacción básica con los usuarios, recuperando con algo más de profundidad las peticiones.