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
o
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.
Próximo Episodio
"Flask 2.- Enrutamiento y Parámetros en URL"
No hay comentarios:
Publicar un comentario