Crear variables de entorno en Flask .flaskenv

Las variables de entorno son una parte importante de la aplicación ya que para poder emplear ciertas herramientas como Flask Migrate, la Shell o el comando de Flask run, debemos de establecer la variable de entorno llamada FLASK_APP:

$ export FLASK_APP=my_app

En Windows:

$ set FLASK_APP=my_app

Hemos visto cómo establecerla mediante la terminal como mostramos en el capítulo 5, en la cual era requerida para poder ejecutar los comandos de Flask Migrate. Pero no hemos visto todo el potencial que esto nos ofrece y cómo lo usa Flask. Por ejemplo, podemos emplear archivos para manejar estas variables de entorno, al igual que ocurre con tecnologías como CodeIgniter o Laravel, podemos crear estos archivos para manejar las variables de entorno del proyecto:

.env

Y en el caso de Flask, también el:

.envflask 

Para manejar estas variables de entorno.

En este capítulo vamos a conocer cómo emplear las variables de entorno mediante archivos.

Vamos a crear una nueva aplicación como hablamos en el capítulo 1.

Si intentamos ejecutar:

$ flask run

Veremos un error como el siguiente:

Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.

En el cual nos indica que se debe de establecer la variable de entorno llamada FLASK_APP indicando el nombre del módulo de la aplicación en Flask.

Para ello, podemos hacerlo mediante la terminal, en Mac o Linux:

$ export FLASK_APP=my_app

En Windows:

$ set FLASK_APP=my_app

O establecerlo en el archivo:

.flaskenv

FLASK_APP=my_app

El valor de FLASK_APP corresponde al nombre del módulo, que en este ejemplo se llama como my_app:

my_app/__init__.py

config.py

.env

.flaskenv

run.py

En donde se encuentra el archivo de arranque de la aplicación:

my_app/__init__.py

Ahora, si intentamos ejecutar el comando de:

$ flask run

Veremos que aun no funciona, sito se debe a que Flask no esta reconociendo el archivo generado anteriormente; para que lo reconozca como una entrada válida para establecer las variables de entorno, debemos de instalar un paquete adicional:

$ pip install python-dotenv

Si ejecutamos nuevamente:

$ flask run

Veremos que ahora si el servidor inicia correctamente; si intentamos ejecutar otros comandos que requieren de conocer la instancia de la aplicación, la variable llamada app que se encuentra dentro de my_app/__init__.py.

La ventaja fundamental de emplear los archivos para manejar las variables de entorno es que no debemos de establecer cada vez que abrimos una terminal las variables de entorno de nuestra aplicación, ya que son tomados desde el archivo.

Estas son las opciones principales que podemos configurar:

  • FLASK_ENV - Indica el ambiente, por defecto es production.
  • FLASK_DEBUG - Indica si la aplicación está en modo DEBUG, por defecto es TRUE.
  • FLASK_APP - Se utiliza para especificar el módulo de la aplicación.
  • FLASK_RUN_PORT - Para especificar el puerto al momento de iniciar la aplicación.

Puedes conocer otras variables de entorno de Flask en:

https://flask.palletsprojects.com/en/latest/config/

Tenemos dos archivos de puntos: .env y .flaskenv. Usamos .flaskenv para cualquier comando de configuración de Flask CLI y usar .env para la configuración de nuestra aplicación.

Por ejemplo, especificamos el nombre del módulo, como hicimos anteriormente:

.flaskenv

FLASK_APP=my_app

Y en este archivo cualquier otra configuración que no tenga el prefijo de FLASK_*:

.env

SECRET_KEY=12345
API_KEY=123

Podemos especificar otras configuraciones como:

.flaskenv

FLASK_ENV=development
FLASK_RUN_PORT=8080

Para acceder a las variables de entorno desde el proyecto, debemos de emplear la función de environ():

config.py

from os import environ 

SECRET_KEY = environ.get('SECRET_KEY')
API_KEY = environ.get('API_KEY')
FLASK_APP = environ.get('FLASK_APP')

La ventaja principal de emplear los archivos para manejar la variables de entorno es que podemos tener en un solo lugar todas las variables de entorno del proyecto, podemos tener múltiples configuraciones en otros archivos tipo .env y cambiar de uno a otro fácilmente y tener archivos para manejar las variables de entorno para desarrollo, producción, pruebas, entre otros.

- Andrés Cruz

In english

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.