3.2 - Web Framework
3.2 - Web Framework
3.2 - Web Framework
Programación 2
Módulo 3: Backend
Tema 2: Web Framework
3.2. Web Framework
3.2.1 Qué es un framework
3.2.2.1 Instalación
Si bien podríamos crear nuestro propio software sin necesidad de emplear un framework,
existe cierta dificultad a la hora de escribir código, y escribir código que otros puedan
entender y manejar es aún más difícil. Debido a que hay que lidiar con la sintaxis, el
rendimiento, la coherencia y otros problemas.
Un framework nos proporcionan una plantilla en la que se han manejado casi todas las
tareas generales, lo que permite al desarrollador centrarse en las tareas más importantes
sin tener en cuenta los detalles del proceso. Para ello proveen herramientas, librerías, y
componentes que pueden ser reutilizados al momento de programar.
Existen diversos frameworks, y cada uno de ellos puede tener una finalidad en particular.
Es decir, cada framework suele centrarse en algún ámbito del desarrollo de software. Por
ejemplo, existen frameworks para el desarrollo frontend de aplicaciones web (como React
y Angular), otros para el desarrollo de aplicaciones móviles (como Flutter), otros
centrados en el desarrollo backend (como Flask, Django y Laravel). En este módulo
aprenderemos acerca de este último tipo de framework, para lo cual utilizaremos Flask.
3.2.2. Introducción a Flask
Para que una aplicación web pueda funcionar será necesario contar con un servidor web.
Si recordamos, en el pasado hemos definido un servidor web o webserver, como el
software que se ejecuta dentro de una computadora que permite la comunicación de la
aplicación con los clientes. Su propósito es escuchar cualquier intento de comunicación
de los clientes, recibir las peticiones o requests de los mismos, llamar a la aplicación
correspondiente para que ejecute lo solicitado y devolver la respuesta o response que le
transmita la aplicación.
Flask no es un servidor web, por lo cual no puede manejar directamente las peticiones
HTTP. Para ello utiliza un servidor web WSGI.
3.2.2.1. Instalación
Para usar Flask es recomendable tener instalada la versión más reciente de Python para
aprovechar las mejoras y correcciones de errores más recientes. Aunque este tiene soporte
desde la versión 3.8 en adelante.
Otra recomendación es crear un entorno virtual para nuestro proyecto. Lo cual se explica
en el Anexo 3.
Para realizar la instalación de Flask deberemos ingresar el comando pip install flask.
Una vez que contamos con Flask debemos tomar en cuenta cómo organizaremos nuestros
proyectos. Esto será de vital importancia ya que nos permitirá tener un código más limpio
y ordenado, y nos facilitará la tarea de mantener y escalar nuestros proyectos.
A diferencia de otros frameworks, Flask no nos impone la estructura que debemos seguir
para organizar nuestros proyectos. Sino que nos brinda la libertad para elegir aquella que
mejor se adapte a nosotros.
Aun con esta libertad es recomendable establecer una estructura clara, y para ello
podemos tomar como referencia la siguiente estructura:
/../example-project/
├── app/ <- Carpeta con el nombre de nuestra aplicación
| ├── __init__.py
A medida que avancemos en este módulo veremos con más detalle cada uno de estos
elementos.
Una aplicación Flask es una instancia de la clase Flask. Todo lo referente a la aplicación
debe ser registrado en esta instancia, esto incluye su configuración, urls, blueprints,
entorno, entre otros.
La manera más directa para crear una aplicación Flask es crear una instancia global de la
clase Flask al principio de todo nuestro código. Sin embargo, aunque esta manera de
trabajar puede ser la más simple y útil en muchos casos, puede producir algunos errores
difíciles de solucionar en proyectos grandes.
Con la aclaración anterior proponemos, en lugar de definir una instancia global de la clase
Flask, definiremos esta instancia dentro de una función. Esta función es conocida como
application factory, y permitirá inicializar nuestra aplicación. Esta función devolverá la
aplicación Flask ya configurada.
Por otro lado, queremos hacer una acotación sobre el origen de la palabra factory. Esta
palabra hace referencia a un patrón de diseño conocido como factory method. Este patrón
de diseño se basa en la creación de objetos sin especificar la clase concreta a crear. Es
decir que, la application factory nos permitirá crear una aplicación sin especificar la clase
concreta de la misma.
Esto nos permitirá crear aplicaciones con diferentes configuraciones, lo cual es muy útil
cuando queremos crear aplicaciones para diferentes entornos (desarrollo, producción,
testing, etc.). En esta materia nos centraremos en el entorno de desarrollo.
Ahora que hemos visto ciertas recomendaciones para organizar y gestionar una aplicación
Flask veamos un ejemplo.
/../example-project/
├── hello_world/
| └── __init__.py
├── .venv/
| config.py
└── run.py
Para comenzar, crearemos un entorno virtual para nuestro proyecto. Para ello, desde la
terminal, nos ubicaremos en la carpeta raíz de nuestro proyecto, el cual en este caso es
example-project. Una vez activado el entorno virtual, instalaremos Flask mediante el
comando que vimos previamente, pip install flask.
__init__.py
from flask import Flask
def init_app():
app.config.from_object(Config)
@app.route('/')
def hello_world():
return app
config.py
class Config:
SERVER_NAME = "127.0.0.1:5000"
DEBUG = True
TEMPLATE_FOLDER = "templates/"
STATIC_FOLDER = "static_folder/"
En la clase Config contamos con atributos de clase, los cuales tienen algún dato
relevante sobre nuestra aplicación:
En esta ocasión incluimos una configuración simple para nuestro proyecto, pero veremos
a lo largo de las próximas clases como complementar esta configuración.
def hello_world():
Hablaremos con más detalle sobre la definición de endpoints próximamente, así que por
el momento omitiremos una explicación sobre este elemento.
Finalmente hemos de hablar del archivo run.py, sin el cual no podríamos iniciar nuestra
aplicación cómodamente.
run.py
1. from hello_world import init_app
2.
3. app = init_app()
4.
5. if __name__ == "__main__":
6. app.run()
Finalmente, en la línea 6 invocamos el método run de la clase Flask para dar inicio a
nuestra aplicación.
Para desplegar una aplicación Flask existen diversas alternativas. Por ejemplo,
desplegarla mediante un servidor web como Apache o Nginx, empleando un servidor
WSGI como Gunicorn, Waitress o el mismo Werkzeug que se encuentra al instalar Flask.
Emplear Werkzeug para desplegar una aplicación Flask no es recomendable
para entornos de producción, ya que este servidor web no está diseñado para
ello. Sin embargo, es una buena alternativa para entornos de desarrollo y como
herramienta de aprendizaje.
* Debug mode: on
* Debugger is active!