miércoles, 17 de junio de 2020

Flask 1. Introducción y primer proyecto.


Introducción a Flask:


Flash es un framework de python para crear entornos web de forma sencilla. En otras palabras, para crear un sitio web que no sea estático, es decir, que no solo podamos ver su contenido sino que también podamos interactuar con el.

La documentación se puede encontrar en https://flask.palletsprojects.com/en/1.1.x/

Instalación de Flask:


    Antes de instalarlo es conveniente que lo hagamos en un Entorno Virtual, que es de forma muy simplificada un espacio o un lugar virtual donde podremos instalar python junto las bibliotecas que necesitemos sin interferir con otros proyectos. Lo que hagamos dentro de ese entorno hay se queda, instalar, borrar, ejecutar...etc. Si luego nos cansamos o necesitamos eliminar ese proyecto, borramos la carpeta y listo.

Yo estoy trabajando con Ubuntu y python 3.6. He creado una carpeta denominada Flask en el escritorio y me he metido dentro de ella. Desde la versión 3.3 de python en adelante, podemos crear un entorno virtual con el modulo venv con la instrucción:

user@ubuntu:~/Escritorio/Flask$ python3 -m venv miEntorno
                                              

Esto te creará una carpeta llamada "miEntorno" donde se instalará todo lo que el entorno virtual necesita (python, bibliotecas que instalemos etc). Una vez que lo hayamos hecho, para meternos dentro del entorno virtual, tenemos que activarlo con:

user@ubuntu:~/Escritorio/Flask$ source miEntorno/bin/activate

Y ya lo tenemos, nos aparecerá algo así como:

(miEntorno) user@ubuntu:~/Escritorio/Flask$

El (miEntorno) al principio del prompt es lo que nos indica que estamos dentro del entorno virtual.
Para salir, esta tan fácil como cerrar el terminal o ejecutar la instrucción: $ deactivate


Una vez dicho lo anterior, volvemos al asunto que era instalar Flask. Suponemos que estamos dentro de nuestro entorno virtual y ejecutamos la instrucción:

(miEntorno) $ pip3 install Flask

Con esto ya tenemos lo que necesitamos para empezar. Aunque no lo he dicho antes, si quieres también puedes instalar Flask sin necesidad de hacerlo en un entorno virtual, claro está.

Vamos a crear nuestra primera aplicación de Flask. Creamos un archivo de python y le ponemos el nombre que quieras. En mi caso le llamaré index.py y tecleamos:

from flask import Flask

app=Flask(__name__)

@app.route('/')
def hola_mundo():
    return "Hola, mundo"

if __name__=="__main__":
    app.run()


Guardamos y ya lo tenemos. Antes de ejecutarlo vamos a explicarlo un poco.

Con "from flask import Flask" hemos importado la libreria Flask, que es lo que vamos a necesitar.

Luego hemos creado un objeto, que hemos llamado app, y que pertenece a la clase Flask. Es lo que nos permitirá posteriormente desplegar la aplicación en un servidor web y jugar con ella. 

"@app.route('/')" Es un decorador que le dirá al navegador que cuando alguien vaya a nuestra primera pagina o pagina principal o de inicio ejecute la función que vaya a continuación.

La función, que hemos llamado hola_mundo, aunque le puedes poner el nombre que quieras, simplemente retorna, o dice al navegador que muestre el texto "Hola, mundo".

Para terminar le decimos al programa que si lo ejecutamos directamente y no lo estamos importando como un modulo que ejecute la aplicación.

¡Y ya está!. Vamos a probarla a ver que pasa:

(miEntorno) $ python3 index.py

Ahora ve al navegador de tu ordenador y teclea en la barra de direcciones:

127.0.0.1:5000 
localhost:5000 

que es lo mismo.

Deberías ver, si todo ha salido bien, un Hola Mundo en la pantalla. 

Otra forma de ejecutar la aplicación es a través del propio Flask. Si el nombre de nuestra aplicación es app.py solo tenemos que ejecutar 

$ flask run

Si nuestra aplicación se llama de otra forma, entonces tenemos que usar una variable de entorno para decir a Flask cual es nuestra aplicación. Esto se hace de la siguiente forma:

$ export FLASK_APP=nombre_aplicacion
y volvemos a ejecutar flask run.

Otra tercera forma es usar la instrucción de linux "curl" que nos devolverá el código html de la página.

$ curl localhost:5000
Hola, mundo


Por defecto, nos tenemos que conectar a nuestra aplicación a través de la url 127.0.0.1:5000. Si quisiéramos cambiar el puerto o la dirección desde la que nuestro servidor web va a responder se lo tenemos que decir a la aplicación dentro de app.run(). 

Por ejemplo, si quisiéramos que nuestro servidor aceptara peticiones desde cualquier dirección a través del puerto 8080 cambiamos en el programa index.py:

app.run("0.0.0.0",8080)

y ejecutamos:

(miEntorno) user@ubuntu:~/Escritorio/Flask$ python3 index.py

El terminal nos dará la siguiente respuesta:

 * Serving Flask app "index" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)


Si vamos al navegador y ponemos cualquier Url con el puerto 8080 veríamos nuestro bonito "Hola Mundo"

Ej.  127.0.0.5:8080

Por último es recomendable cambiar el debbuger (lo que viene siendo el depurador) a True porque así  nuestra aplicación nos permitirá estudiar los posibles errores cometidos, y además se activa el modo “reload” que inicia automáticamente el servidor. Con esto podremos cambiar código en nuestro programa, guardarlo y volver a recargar el navegador y ver los resultados sin necesidad de tener que andar apagando y volviendo a encender el servidor cada vez que hagamos cambios.

Esto se consigue añadiendo a app.run() lo siguiente:

app.run(debug=True)

Ya para terminar, a mi me ocurría que al principio intentaba apagar el servidor con ctrl+z por equivocación, con lo cual estaba mandando la aplicación a un segundo plano :-{. Luego lo volvía a iniciar con python3 index.py de nuevo, y al estar trabajando en linux me salía el error:
 "OSError: [Errno 98] Address already in use". 

Vamos que no se da por enterado de que yo lo que quería era apagar el servidor (hay veces que te empeñas en dar a una tecla y erre que erre ¿no te ha pasado?) y seguía usando lógicamente el puerto 5000.  Bueno, pues si alguna vez quieres matar un proceso en uso puedes hacer lo siguiente.

$ fuser -n tcp 5000   
5000/tcp:             2097 

(lo de 5000 es, porque si no lo hemos modificado, por defecto el programa utiliza ese puerto para comunicarse). Esto nos dirá que proceso o procesos están usando ese puerto. En mi caso el puerto esta siendo usado por el proceso 2097. Pues la solución es acabar con el con:

$ kill -9 2097

Así destruimos el proceso y podemos ejecutar python3 index.py de nuevo.












No hay comentarios:

Publicar un comentario