Menu
CoddyTech

Paramètres issus de l’environnement

Fait partie de la section API JSON du Journey Django de Coddy. Leçon 18 sur 19.

Une fois votre site déployé, c’est-à-dire copié sur un serveur accessible sur Internet, trois paramètres doivent changer. DEBUG = True révèle votre code et tous les modèles d’URL à tout le monde. SECRET_KEY signe les valeurs auxquelles votre site doit pouvoir se fier, comme les liens de réinitialisation de mot de passe et les cookies signés ; elle ne doit donc pas se trouver dans du code que d’autres personnes peuvent lire. ALLOWED_HOSTS répertorie les domaines desservis par le site.

La solution habituelle consiste à les lire depuis des variables d’environnement, des valeurs que le serveur transmet au programme lors de son démarrage. os.environ.get(name, default) en lit une, et la valeur par défaut est celle utilisée sur votre propre ordinateur :

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

Une variable est toujours une chaîne de caractères : convertissez-la donc au type dont vous avez besoin : int() pour un nombre, une comparaison pour obtenir un véritable booléen, split(",") pour une liste. Choisissez des valeurs par défaut sûres : si une variable est oubliée, DEBUG reste désactivé.

challenge icon

Défi

Moyen

Lisez trois paramètres depuis l’environnement.

  1. En haut de mysite/settings.py, ajoutez import os.
  2. Remplacez les lignes SECRET_KEY, DEBUG et ALLOWED_HOSTS fournies dans le code de départ. SECRET_KEY provient de DJANGO_SECRET_KEY, avec comme valeur par défaut "django-insecure-change-me". DEBUG vaut True uniquement lorsque DJANGO_DEBUG est le texte "True". ALLOWED_HOSTS provient de DJANGO_ALLOWED_HOSTS, séparé aux virgules, avec comme valeur par défaut localhost,127.0.0.1.

Ouvrez /nope/ : vous voyez uniquement Not Found, sans liste de modèles d’URL.

Essayez vous-même

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/"

Toutes les leçons de API JSON

Entraînez-vous par vous-même : Playground Django