Backends de Apps con Python y Django by @ycumberbirch

Autor: | Última modificación: 21 de diciembre de 2022 | Tiempo de Lectura: 5 minutos
Temas en este post:

Cuando vas a desarrollar una aplicación móvil, una de las cosas que te debes plantear es la necesidad incluir una parte de servidor.

Whatsapp, Twitter, Instagram y Evernote: ¿te suenan de algo? Son 4 ejemplos de Apps de enorme éxito y que tienen, al igual que casi toda App de hoy en día tienen dos componentes:

  • Uno o más clientes móviles (iOS, Android y J2ME para el Nokia de tu abuela)
  • Un backend que permite almacenar datos, compartir información entre los usuarios e incluso ser la base de tu modelo de negocio, como es el caso de Evernote.

En esta santa casa se habla mucho de una parte, el cliente móvil, pero ¿qué pasa con la acera de enfrente, el backend? ¿Cómo se haría un backend con python?

Backends de Apps con Python y Django

Tenemos a disposición numerosos servicios de backend de terceros para móviles (mBaaS -mobile Backend as a Service) que son muy potentes y completos en cuanto a servicios ofrecidos y simplicidad se refiere.

Pero, ¿y si no necesitamos tantos servicios? ¿Y si solo necesitamos unas pocas bases de datos y mantenimiento de sesión? Podríamos utilizar sistemas más completos teniendo en desuso gran parte de lo que nos ofrece, o podríamos buscar una alternativa.

¿Qué ocurre si necesitas más de lo que te ofrecen los mBaaS? ¿Y si tienes necesidades muy específicas que no son atendidos por los mBaaS, como por ejemplo compartir 20 mil millones de mensajes al día, como hace Whatsapp?

En ambos casos, la solución es la misma: arremangarse y crear tu propio backend. Eso sí, no temas, joven padawan, la cosa es más sencilla de lo que parece. Es ahí donde aparece django y el backend con python.

django_unchained_Backends de Apps
Desencadénate en Python y Django con nuestro curso. Si ya sabes iOS, tendrás en tus manos las dos tecnologías más demandadas en el momento.

Django: framework web de python 

Django es un framework de Python utilizado como backend de servicios web. A mi juicio, es una de las plataformas más sencillas e intuitivas de utilizar. Con unas pocas lineas de código puedes tener un servicio completo de backend con una API REST para su acceso sencillo. Desde tu aplicación, no serán más que GETs y POSTs, y en el servidor, una tarde de trabajo y ya tienes todo listo. También puedes integrar tu servicio rest con RESTKit, y de cara al cliente móvil todas las llamadas parecerán locales.

Para dichas peticiones, lo habitual es utilizar JSON como formato para el intercambio de datos. Dicha estructura es muy simple, basada en el concepto de clave-valor, y fácilmente manejable por tanto tu aplicación móvil como por Django o aplicaciones en Django. Otra ventaja que tiene es que no está necesariamente orientada a ninguna plataforma en concreto, por lo cual puedes utilizar el mismo backend simple independientemente que quieras una aplicación para iOS, Android o Web, o las tres a la vez si es lo que quieres. Puedes utilizar JSON en todas tus plataformas, y simplemente en cada una de ellas tratar estos datos como lo veas conveniente para mostrarlos de acuerdo con cada dispositivo.

Vamos a empezar con Django. La única diferencia notable entre que utilicemos Django como backend de nuestra aplicación web a nuestra aplicación móvil el es formato de los datos devueltos. Por lo cual, los primeros pasos de crear un proyecto Django son los mismos:

$ django-admin.py startproject projectName
$ cd projectName
$ python manage.py startapp applicationName

Con esto, en nuestra carpeta projectName tendremos 2 carpetas para la creación de Django :

  • projectName: Esta contiene los ficheros relacionados con la configuración del servidor. En estos ficheros configuraremos nombre y tipo de base de datos, así como la configuración general de la aplicación (settings.py) y las urls que sirve nuestra aplicación y su respectivo mapeo a las vistas (urls.py)
  • applicationName: Contiene los ficheros relacionados con nuestra aplicación. En estos ficheros, encontraremos los ficheros para definir el modelo (models.py) y para crear las funciones que se llamarán al acceder al servidor (views.py). Al igual que en iOS, usamos un ORM que nos transforma los modelos en clases y tablas, tal y como hace Core Data y Mogenerator.

La parte interesante de nuestra aplicación vendrá en views.py. Ahí definiremos lo que se le devuelve al usuario cuando hagamos una llamada. Django trae un manejo sencillo de las bases de datos, de forma que resulta muy simple obtener los datos deseados de estas, ya sea toda una tabla o aplicando filtros de la información para solo enviar los datos necesarios.

Aquí tenemos un ejemplo simple. Una aplicación que tiene una base de datos (Cursos), y que si accedes a la url correspondiente te devuelve los contenidos de dicha tabla en un formato JSON. Empezando por lo fácil, vamos a definir la tabla de cursos de la base de datos:

models.py

from django.db import models

class Course(models.Model):
    name = models.CharField(max_length=255)
    code = models.CharField(max_length=50)
    date = models.DateField()
    instructor = models.CharField(max_length=255)

Vemos que tenemos un campo de fecha. Si intentamos meter este a formato JSON veremos que nos da un error de que dicho tipo no se puede serializar como JSON. Por lo tanto, tendremos que hacer la conversión nosotros mismos. Vamos a ver ahora la función que devuelve el JSON:

views.py

# Create your views here.
import json
from django.http import HttpResponse
from models import Course

def getCourse(request):
    courses = Course.objects.all()
    response_data = {}

    for c in courses:
        course_d = {}
        course_d["name"] = c.name
        course_d["day"] = c.date.day
        course_d["month"] = c.date.month
        course_d["year"] = c.date.year
        course_d["instructor"] = c.instructor
        response_data[c.code] = course_d
    return HttpResponse(json.dumps(response_data), content_type="application/json")

Vemos que dicha función coge el tipo de fecha y va cogiendo los campos sueltos para añadir estos al JSON. Si nuestra aplicación móvil hace una llamada a la url que llama a dicha función, obtendríamos un JSON con los datos de todos los cursos para mostrarlos como desee el usuario.

También podríamos utilizar este sistema para autenticar usuarios en la aplicación. En dicho caso, tendríamos que hacer llamadas POST al servidor con el usuario y la contraseña para ver si este está registrado con dicha contraseña. Con el mismo procedimiento podríamos registrar usuarios en nuestra aplicación, haciendo el mismo POST pero guardando los datos en la base de datos en vez de solo comparando sus valores.

¡Ya tenemos nuestra backend con python! Como podemos ver, con poco esfuerzo tenemos el backend de nuestra aplicación móvil funcional y listo para todo lo que queramos.

Curso de Backends y API REST con Python y Django

¿Quieres saber más acerca de las aplicaciones en django? Pues apúntate a nuestro bootcamps de programación y crea en dos días y medio Forcebook: una red social para personajes de Star Wars, con API REST lista para enganchar tus clientes web a él con Python y django.