martes, 1 de abril de 2014

API REST con Django REST Framework (1 de 2)

Como parte del staff del Concurso Nacional de Emprendimiento e Innovación Móvil 2014 se me solicitó realizar un minitutorial acerca de como crear una API REST usando el framework para desarrollo web "Django" el cual está escrito en Python y con el cual se pueden crear poderosas aplicaciones y sitios web altamente versátiles.

El tutorial se dividirá de la siguiente forma:
Primera parte: Creación de proyecto, apps y modelo.
Segunda parte: Django REST Framework Configuraciones de Acceso.

Anexos: Instalación de Python. Instalación de paquetes vía pip/easy_install. Archivos estáticos en Django. Uso básico de Git. Variables de entorno en Windows.

Asumiendo que ya saben usar pip install o easy_install  lo que sigue es instalar todas las librerías que se señalan en el archivo requirements.txt. El código fuente de todo el proyecto y el requirements.txt lo descargan de aqui:

https://bitbucket.org/Lvcios/eimtutorial/src

Supongamos que queremos realizar una aplicación que muestre información sobre películas, es decir, críticas, actores, director, datos importantes como cuanto recaudó, en que año salio,  cuantas nominaciones a los oscares tuvo, etc. Es claro ver que el presentar esta información en una base de datos requiere de mas de una tabla si hablamos de SQL o de modelos embebidos si estamos usando alguna base de datos NoSQL. Como sea, el primer paso es crear un proyecto en Django con el siguiente comando:

python django-admin.py startproject EIMBackendTutorial

Lo anterior creará una carpeta con el nombre especificado junto con los archivos mínimos necesarios para correr el proyecto. Para correr el proyecto entramos en la carpeta del mismo y ejecutamos el siguiente comando:

python manage.py runserver

Este comando nos indicará que nuestra aplicación está corriendo en determinada dirección la cual es por defecto http://127.0.0.1:8000/ Para romper el proceso  basta con presionar ctrl + c en la consola.

Lo que sigue es crear nuestro modelo en Django, para eso tenemos que crear una aplicación la cual llamaré "Movies" y la creo de la siguiente manera:

python manage.py startapp peliculas

Al igual que startproject, startapp crea una carpeta con los archivos mínimos necesarios para crear una aplicación. Dentro de esa carpeta tenemos el archivo models.py que es donde escribiremos nuestro modelo de datos que posteriormente será leído por el api que crearemos con RESTFramwork. Básicamente el modelo de datos seria el siguiente:

#endcoding:utf-8
from django.db import models

# Create your models here.

class Director(models.Model):
nombreDirector = models.CharField(max_length = 100)
pais = models.CharField(max_length = 100)

def __unicode__(self):
return self.nombreDirector

class Actor(models.Model):
nombreActor = models.CharField(max_length = 100)
pais = models.CharField(max_length = 100)
def __unicode__(self):
return self.nombreActor

class Pelicula(models.Model):
nombre = models.CharField(max_length = 100)
anio = models.DateField()
sinopsis = models.TextField()
director = models.ManyToManyField(Director, related_name = 'director')
actor = models.ManyToManyField(Actor, related_name = 'actor')

def __unicode__(self):
return self.nombre

class Critica(models.Model):
pelicula = models.ForeignKey(Pelicula, related_name = 'critica')
critica = models.TextField()
def __unicode__(self):
return unicode(self.pelicula) + ' ' + unicode(self.critica)


Y para poder visualizarlos en el administrador por defecto de django creamos un archivo llamado admin.py dentro de la misma carpeta con lo siguiente

# -*- coding: UTF-8 -*-
from django.contrib import admin
from peliculas.models import *

admin.site.register(Director)
admin.site.register(Actor)
admin.site.register(Pelicula)

admin.site.register(Critica)

Con esto ya es posible agregar datos a la base de datos desde el Administrador. Ahora solo queda sincronizar la bd con el siguiente comando:

python manage.py syncdb


Es súper importante mencionar que deben registrar la aplicación en el settings.py. Busquen dentro de ese archivo la sección de INSTALLED_APPS y solo agregan 'peliculas'. No olviden colocar la coma al final.

Al momento de sincronizar la base de datos nos mostrará los errores, si es que los hay. Si no hay errores entonces nos pedirá crear un súper usuario. Este paso lo podemos omitir si queremos pero en este tutorial si lo crearemos.

Una vez sincronizados los modelos con la base de datos corremos el proyecto con el comando indicado anteriormente y en el explorador tecleamos: http://127.0.0.1:8000/admin/. Encontrarán un pantalla de log-in y a continuación verán el listado de los modelos que creamos. Desde el administrador de Django ya poseé la capacidad de realizar inserciones, modificaciones, consultas y eliminaciones de registros. Recomiendo explorarlo poco a poco.

El administrador posee muchas opciones las cuales se pueden personalizar a través de código. De igual forma, los modelos se pueden manipular desde la consola y realizar operaciones y tests. Esos son temas que no veremos aquí pero están muy bien documentados en la página oficial de DjangoProject.

Hasta aquí llega la primera parte del tutorial.

El código se lo pueden descargar de aqui:
https://bitbucket.org/Lvcios/eimtutorial/src

SEGUNDA PARTE
NOTA: Estos tutoriales estarán en video, aumentados y corregidos en la página del EIM proxiamente.