Flask es un framework ligero escrito en Python y concebido para facilitar el desarrollo de aplicaciones Web bajo el patrón MVC, similar a Sinatra de Ruby o Express de Node.js. El término “ligero” quiere decir que su núcleo dispone de un número reducido de características, las mínimas para implementar las abstracciones del protocolo HTTP y su manipulación. Esto significa que no tiene ORM (Object-Relational Mapping), gestión de formularios, autenticación, etc., pero es fácilmente extensible y pueden añadirse paquetes según las necesidades y la libre elección del desarrollador. Por ejemplo, tiene integración con SQLAlchemy, un popular ORM de Python, podemos añadir los procesos de registro y autenticación con Flask-Security, conectar con redes sociales mediante Flask-Social o implementar tests A/B con Flask-Split.
Gracias a estas características Flask nos ayuda a acortar el time-to-market de productos distribuidos en forma de aplicación Web y por otro lado nos permite elegir siempre las extensiones que mejor se adapten a nuestras necesidades, manteniendo siempre el código limpio, ligero y fácilmente mantenible.
De momento, a modo de introducción, vamos a crear una aplicación tipo “Hola Mundo” en Flask. El objetivo no es conocer Flask a fondo, si no aprender a crear un entorno y unas dependencias para poder, en siguientes artículos, desarrollar rápidamente ejemplos más complejos en los cuáles se vean las ventajas del uso de Flask en nuestros proyectos.
Instalando las herramientas
Suponiendo que ya tengamos instalado Python en nuestra máquina, lo primero que vamos a hacer es crear un entorno virtual con virtualenv y pip. La herramienta virtualenv permite instalar librerías python de forma privada a un proyecto, lo cual facilita la recreación del entorno en otras máquinas diferentes a la que hemos usado para iniciar el proyecto. Por otro lado, pip es un instalador de paquetes de python. Primero vamos a instalar pip, ya que lo usaremos para gestionar el resto de dependencias, incluida la de virtualenv. La documentación recomienda descargar el script get-pip.py y ejecutarlo con nuestro runtime de python (necesita permisos de administrador, en el caso de unix/linux bastaría con ejecutarlo con sudo).
$ python get-pip.py
Una vez instalado pip vamos a usarlo para instalar virtualenv. Con pip es muy sencillo (también son necesarios permisos de administrador):
$ pip install virtualenv
Creando nuestro entorno
Vamos a desarrollar un sencillo “Hola Mundo” en Flask. Para ello, lo primero que tenemos que hacer es crear una carpeta para nuestro proyecto, que llamaremos “hola-flask”:
$ mkdir hola-flask
$ cd hola-flask
Una vez dentro de la carpeta, crearemos el entorno virtual con virtualenv
$ virtualenv env
y una vez creado, lo activamos
$ source env/bin/activate
Sobre el entorno activado podemos instalar las dependencias que necesitemos en nuestro proyecto. En este caso no es necesario tener privilegios de administrador porque vamos a ejecutarlo dentro de nuestro propio entorno. Para nuestro “Hola Mundo” sólo necesitamos Flask:
(env)$ pip install flask
Ya estamos listos para desarrollar nuestra primera aplicación con Flask.
Desarrollando “Hola Mundo” con Flask
La estructura del proyecto consistirá en el script principal en python y un template jinja2, que es el motor de templates integrado en Flask. Por defecto, los templates en Flask deben declararse dentro de una carpeta “templates” colgando del raíz del proyecto.
app.py
templates/
hola.html
Donde app.py consistiría en la definición del controlador “hola”, sus rutas asociadas y el arranque de la aplicación
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hola/')
@app.route('/hola/')
def hola(nombre=None):
return render_template('hola.html', nombre=nombre)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
y hola.html define la vista asociada al controlador “hola”:
<!DOCTYPE html>
<title>Hola desde Flask</title>
{% if nombre %}
¡Hola {{ nombre }}!
{% else %}
¡Hola Mundo!
{% endif %}
Ya podemos arrancar nuestra aplicación, usando el runtime de python:
$ python app.py
y podemos acceder a ella desde http://localhost:5000/hola/Caracola
Puedes ver el código fuente completo de este ejemplo en nuestra cuenta de github.