Aprender a manejar información sensible es crucial para la seguridad de cualquier proyecto. Jango facilita este proceso mediante su librería Django Environment, la cual permite gestionar credenciales fuera del archivo de configuración principal.
¿Cómo instalar Django Environment?
Para comenzar, instala Django Environment desde la terminal usando el comando:
pip install django-environ
Luego, ve a tu archivo settings.py y añade la importación de la librería al principio del archivo:
import environ
¿Cómo configurar las variables de entorno?
Primero, crea una nueva instancia de la librería y define las variables en el archivo settings.py:
env = environ.Env()
Luego, mueve tus credenciales sensibles a un archivo .env en la raíz del proyecto, asegurándote de no subir este archivo al repositorio:
DATABASE_PASSWORD=my_secure_password
En settings.py, reemplaza las credenciales directas con las variables de entorno:
Uso de Django Environ para Manejar Credenciales Seguras
Recursos
Resumen
Aprender a manejar información sensible es crucial para la seguridad de cualquier proyecto. Jango facilita este proceso mediante su librería Django Environment, la cual permite gestionar credenciales fuera del archivo de configuración principal.
¿Cómo instalar Django Environment?
Para comenzar, instala Django Environment desde la terminal usando el comando:
pip install django-environ
Luego, ve a tu archivo settings.py y añade la importación de la librería al principio del archivo:
import environ
¿Cómo configurar las variables de entorno?
Primero, crea una nueva instancia de la librería y define las variables en el archivo settings.py:
env = environ.Env()
Luego, mueve tus credenciales sensibles a un archivo .env en la raíz del proyecto, asegurándote de no subir este archivo al repositorio:
DATABASE_PASSWORD=my_secure_password
En settings.py, reemplaza las credenciales directas con las variables de entorno:
import os
from pathlib import Path
import dj_database_url
from dotenv import load_dotenv
# Cargar variables de entorno desde el archivo .env
load_dotenv()
# Obtener la cadena de conexión desde la variable de entorno
DATABASE_URL = os.getenv('DATABASE_URL')
DATABASES = {
'default': dj_database_url.config(default=DATABASE_URL)
}
El error indica que Django está intentando acceder a una variable de entorno llamada DJANGO\_DB\_PASSWORD en tu archivo settings.py, pero esa variable no está configurada en el entorno.
Django, a menudo, utiliza la biblioteca django-environ para cargar variables de entorno que se almacenan en un archivo .env. Este archivo puede contener configuraciones sensibles como las credenciales de la base de datos.
Aquí te muestro cómo puedes solucionar este problema:
### 1. **Verificar si tienes un archivo .env**
Asegúrate de tener un archivo .env en el directorio raíz de tu proyecto, donde defines variables como DJANGO\_DB\_PASSWORD.
Un archivo .env típico puede lucir algo así:
```bash
DJANGO_DB_NAME=nombre_base_datos
DJANGO_DB_USER=tu_usuario
DJANGO_DB_PASSWORD=tu_contraseña
DJANGO_DB_HOST=localhost
DJANGO_DB_PORT=5432
```
### 2. **Crear o modificar el archivo .env**
Si no tienes un archivo .env, crea uno en el mismo directorio donde está el archivo . Luego, añade las credenciales de la base de datos, por ejemplo:
manage.py
```bash
DJANGO_DB_NAME=coffee_shop_db
DJANGO_DB_USER=postgres
DJANGO_DB_PASSWORD=tu_contraseña
DJANGO_DB_HOST=localhost
DJANGO_DB_PORT=5432
```
### 3. **Modificar settings.py para cargar las variables de entorno**
Asegúrate de que en tu archivo settings.py estás cargando las variables de entorno correctamente. Deberías tener algo como esto:
```python
import environ
env = environ.Env()
environ.Env.read_env() # Lee el archivo .env
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env('DJANGO_DB_NAME'),
'USER': env('DJANGO_DB_USER'),
'PASSWORD': env('DJANGO_DB_PASSWORD'),
'HOST': env('DJANGO_DB_HOST'),
'PORT': env('DJANGO_DB_PORT'),
}
}
```
### 4. **Verifica que la variable de entorno esté configurada**
Si no puedes o no quieres usar un archivo .env, también puedes configurar las variables de entorno directamente en la terminal o en tu entorno de desarrollo. Por ejemplo, en PowerShell, puedes establecer la variable de esta manera:
```bash
$env:DJANGO_DB_PASSWORD="tu_contraseña"
```
O en bash (Linux o macOS):
```bash
export DJANGO_DB_PASSWORD="tu_contraseña"
```
Asegúrate de reiniciar el entorno o terminal después de establecer las variables.
### 5. **Reintentar**
Después de haber configurado la variable de entorno o el archivo .env, vuelve a intentar ejecutar tu aplicación:
```bash
python manage.py runserver
```
Si sigues estos pasos, el error debería solucionarse y tu proyecto Django debería conectarse correctamente a la base de datos.
Dependiendo de donde en AWS le den a que obtenga tu IP en los security rules puede funcionar o dar TimeOut. En mi caso, mi IP cambió y me daba timeout. Solo tuve que ir nuevamente a los security rules y volver a cargar mi nueva IP (para fines de prueba).
Cuando el profe agrega una nueva variable de entorno en el archivo .env observen como la en la parte superior derecha (donde dice zsh) aparece un signo de alerta. Eso siempre pasará cuando modifiquemos ese archivo. Esa alerta sugiere que debemos hacer un reload window, para que los cambios queden guardados.
Como lo hizo el profe fue un poco más forzado ya que directamente exportó la variable, vean como el warning no se quita. Mientras que si escriben CTRL + SHIFT + P y escriben en el cuadro de diálogo ">Developer: Reload Window" todo el .env queda cargado y el warning desaparece.