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é.
Défi
MoyenLisez trois paramètres depuis l’environnement.
- En haut de
mysite/settings.py, ajoutezimport os. - Remplacez les lignes
SECRET_KEY,DEBUGetALLOWED_HOSTSfournies dans le code de départ.SECRET_KEYprovient deDJANGO_SECRET_KEY, avec comme valeur par défaut"django-insecure-change-me".DEBUGvautTrueuniquement lorsqueDJANGO_DEBUGest le texte"True".ALLOWED_HOSTSprovient deDJANGO_ALLOWED_HOSTS, séparé aux virgules, avec comme valeur par défautlocalhost,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