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
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter