Menu
CoddyTech

Configuración desde el entorno

Parte de la sección API JSON del Journey de Django de Coddy. Lección 18 de 19.

Una vez que tu sitio está implementado, es decir, copiado a un servidor en internet, deben cambiarse tres ajustes. DEBUG = True muestra tu código y todos los patrones de URL a cualquiera. SECRET_KEY firma las sesiones, por lo que no puede estar en código que otros puedan leer. ALLOWED_HOSTS enumera los dominios a los que responde el sitio.

La solución habitual: leerlos de variables de entorno, valores que el servidor le proporciona al programa cuando se inicia. os.environ.get(name, default) lee una, y el valor predeterminado es el que obtiene tu propio ordenador:

PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "20"))
MAINTENANCE = os.environ.get("MAINTENANCE", "no") == "yes"

Una variable siempre es una cadena, así que conviértela al tipo que necesitas: int() para un número, una comparación para obtener un booleano real, split(",") para una lista. Elige valores predeterminados seguros: si olvidas definir una variable, DEBUG permanecerá desactivado.

challenge icon

Desafío

Intermedio

En mysite/settings.py, lee los valores del entorno:

  • SECRET_KEY de DJANGO_SECRET_KEY, con el valor predeterminado "django-insecure-change-me".
  • DEBUG: solo es True cuando DJANGO_DEBUG es "True".
  • ALLOWED_HOSTS de DJANGO_ALLOWED_HOSTS, separados por comas, con el valor predeterminado localhost,127.0.0.1.

Pulsa Run y luego abre /nope/: con DEBUG desactivado, la página 404 no muestra ningún patrón de URL.

Pruébalo tú mismo

from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = "django-insecure-change-me"
DEBUG = True
ALLOWED_HOSTS = []

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "tasks",
]

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

ROOT_URLCONF = "mysite.urls"

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    }
}

LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True

STATIC_URL = "static/"

Todas las lecciones de API JSON

Practica por tu cuenta: Playground de Django