Introducción a Flask

Objetivos:
  • Comprender la arquitectura de la Web.
  • Familiarizarse con los conceptos básicos y terminologías utilizadas.
  • Instalar un entorno virtual de Python para nuestros proyectos.
  • Realizar una aplicación "Hello World!" con Flask.

Arquitectura de la web

Cuando hablamos de web tenemos que hacer la distinción entre WWW(Word wide web) e Internet. No son lo mismo

Por un lado la WWW es es una colección global de documentos de textos y otros recursos, unidos por hyperlinks(enlaces) y URIs(uniform resource identifies). En cambio internet es un sistema global de redes de computadoras conectadas.

Cómo funciona la web

Sabemos que para acceder a la web necesitamos un navegador(browser), como por ejemplo Internet Explorer (por favor no uses ese), MozillaFirefox, Chrome, Opera, Safari, etc, y una dirección de internet, digamos «www.google.com.ar». Al apretar ir o apretar la tecla enter, suceden varian cosas.

Por un lado el navegador envía por internet la petición de la página que queremos alcanzar, para ello existe el DNS(Domain Name Service), que se encarga de traducir el nombre de dominio «google.com.ar» a una dirección IP(Internet Protocol), que es un número que identifica a un recurso en un servidor(computadora), como por ejemplo 192.169.255.1. Así la petición que estamos haciendo llega al destino indicado, es asi como el navegador "sabe" dónde ir a buscar los contenidos de cada sitio que visitamos.

Socket designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiar cualquier flujo de datos, generalmente de manera fiable y ordenada.

El término socket es también usado como el nombre de una interfaz de programación de aplicaciones (API) para la familia de protocolos de Internet TCP/IP, provista usualmente por el sistema operativo.

Un puerto de red es una interfaz para comunicarse con un programa a través de una red

Instalación de Paquetes necesarios

  1. Instalar pip.
  2. Instalar virtualenv.

Así como nuestro GNU/Linux tiene una herramienta para la instalación de paquetes como apt o yum/dnf, con Python también tenemos algo similar. Por suerte existe pip y la instalación de paquetes es muy sencilla.

Necesitamos tener instalado en nuestro sistema opertativo esta herramienta. Para eso debemos instalar los paquetes python3-pip para usar pip3 con Python 3.x y python-pip para usar pip con Python 2.x:

$ sudo apt install python-pip python3-pip

Ahora que tenemos instalado pip podemos usarlo para instalar virtualenv.

$ sudo pip install virtualenv

Creando el proyecto

  1. Crear el entorno virtual.
  2. Instalar Flask.
  3. Armando la aplicación.

Creando el entorno virtual

Con las herramientas necesarias ya instaladas, tenemos que crear un directorio donde vamos a contener los archivos necesarios. Creamos una carpeta que se llame hello_world_app y nos movemos dentro de ella para instalar el entorno virtual de Python.

~ ➜ mkdir hello_world_app
~ ➜ cd hello_world_app
~/hello_world_app ➜

Todo el trabajo de nuestros proyecto web lo realizaremos dentro de esta carpeta hello_world_app. Si queremos pasar nuestro trabajo a otra máquina basta con copiar esta carpeta a destino y tenemos nuestros proyecto donde querramos.

Para instalar el entorno virtual, debemos darle un nombre, flasky es el que elegimos para este proyecto. Simplemente para no confundir el nombre del entorno virtual con el paquete Flask. Vamos a usar Python 3 en nuestra aplicación. Para averiguar dónde está el binario de Python 3 usamos el comando which:

~/hello_world_app ➜ which python3
/usr/bin/python3
~/hello_world_app ➜

Ahora le pasamos esa ruta al comando virtualenv para que nos cree el entorno virtual con Python 3 utilizando el parámetro -p:

~/hello_world_app ➜ virtualenv -p /usr/bin/python3 flasky

Esto creará una carpeta llamada flasky que contiene una instalación de Python.

Tip

O podemos hacer todo junto en un mismo comando:

~/hello_world_app ➜ virtualenv -p $(which python3) flasky
Árbol del entorno virtual.

Dentro de esta carpeta nos interesa el archivo activate que va a servir para activar nuestro entorno virtual en nuestra sesión activa de la terminal. Lo activamos usando el comando source de la siguiente manera:

~/hello_world_app ➜ source flasky/bin/activate
(flasky) ~/hello_world_app ➜

Luego podemos usar el comando deactivate para volver a tener nuestra terminal normalmente.

(flasky) ~/hello_world_app ➜ deactivate
~/hello_world_app ➜

Tip

Activar el entorno virtual implica que cuando ejecutemos el comando python se llamará al binario del entorno virtual y no al de la instalación normal de nuestro sistema operativo. En el entorno virtual podemos instalar diferentes paquetes y versiones y quedarán para uso exclusivo de este entorno.

Instalando Flask

Con el entorno virtual activo instalamos Flask usando pip.

(flasky) ~/hello_world_app ➜ pip install Flask

Tip

Otra ventaja del entorno virtual es que nos deja instalar paquetes de Python a través de pip sin tener que tener privilegios administrativos. Es decir, sin usar sudo.

Armando la aplicación

Y creamos las carpetas necesarias para nuestra aplicación:

(flasky) ~/hello_world_app ➜ mkdir app
(flasky) ~/hello_world_app ➜ mkdir app/static
(flasky) ~/hello_world_app ➜ mkdir app/templates

Dentro de app tendremos crearemos todos los archivos de la aplicación de Flask. Dentro de ella creamos un archivo llamado routes.py con el siguiente contenido:

edd/routes.py

#!/usr/bin/env python

# Importamos del módulo flask la clase Flask que creará nuestra aplicación.
from flask import Flask

# Creamos una nueva instancia de Flask y la asignamos a `app`.
app = Flask(__name__)

# Estos decoradores nos sirven para mapear qué funciones se van a llamar en el
# momento que al servidor le llegue una petición con esa URL.
@app.route('/')
@app.route('/index')
def index():
    """ Nuestra función que responde en '/' o en '/index' y devuelve un
        simple 'Hello World!'
    """
    return "<h1>Hello World!</h1>"

# Si ejecutamos el módulo, la aplicación de Flask corre con el modo de prueba
# activo.
if __name__ == "__main__":
    app.run(debug=True)

Luego podemos ejecutar nuestra aplicación de prueba que escuchará peticiones en la ip 127.0.0.1 en el puerto 5000. Para cortar el servidor podemos presionar Ctrl+C:

(flasky) ~/hello_world_app ➜ python routes.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 459-745-705