Cómo usar variables de entorno en Django

header image

¿Qué son las variables de entorno?

Son valores que se cargan en memoria y afectan los procesos que lleva a cabo el servidor. Podemos encontrarlas en la mayoría de sistemas operativos y también en el desarrollo de software.

Al desarrollar un proyecto en Django, nos encontramos con la necesidad de compartir el proyecto, ya sea en un repositorio de control de versiones (Gitlab, Github, etc…) o en cualquier otra plataforma pero hay valores privados que no pueden ser vistos por todos. El ejemplo más claro serían las API KEYS de las integraciones externas que pueda tener nuestro proyecto. Estas llaves son privadas y no deben exponerse de forma pública.

Otro caso de uso sería la necesidad de mantener el mismo proyecto en diferentes entornos de trabajo (testing, pre-producción, producción…), donde la mayoría de veces es necesaria una configuración distinta, cómo podría ser conexión a la base de datos, API KEYs de test, etc…

Python Decouple es la librería que vamos a usar para separar los parámetros privados de configuración del código fuente del proyecto. 

Instalación

 $ pip install python-decouple

Uso

Vamos a considerar el siguiente archivo settings.py:
from pathlib import Pathlib

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'k@%qn&+)qvf4)j=b@17qq&igc7b!t0@ihkvq8$=e8svlv3y5yh'
DEBUG = True
DATABASES = {
    'default': {
        'ENGINE: 'django.db.backends.postgresql_psycopg2',
        'NAME': 'test_db',
        'USER': 'admin',
        'PASSWORD': 'dYc#)7QH',
        'HOST': '127.0.0.1',
        'PORT': '5432'
    }
}

Crearemos un archivo con nombre .env en la carpeta raíz del proyecto:

SECRET_KEY=k@%qn&+)qvf4)j=b@17qq&igc7b!t0@ihkvq8$=e8svlv3y5yh
DEBUG=True
DB_NAME=test_db
DB_USER=admin
DB_PASSWORD=dYc#)7QH
DB_HOST=127.0.0.1

Si estás trabajando con git, actualiza el archivo .gitignore añadiendo el archivo .env para no hacer commit de los datos privados.

Nos situamos de nuevo en el archivo settings.py e importamos la librería:

from decouple import config

Seguidamente actualizamos los parámetros de configuración:

from pathlib import Pathlib
from decouple import config

BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG')
DATABASES = {
    'default': {
        'ENGINE: 'django.db.backends.postgresql_psycopg2',
        'NAME': config('DB_NAME'),
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': config('DB_HOST'),
        'PORT': '5432'
    }
}

Para finalizar, arrancamos de nuevo el proyecto y nos aseguramos que hemos escrito correctamente toda la configuración relacionada con las variables de entorno:

$ python manage.py runserver

 

Feu un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *