الإعدادات من البيئة
جزء من قسم واجهات API بصيغة JSON في رحلة Django على Coddy. الدرس 18 من 19.
بمجرد نشر موقعك، أي نسخه إلى خادم على الإنترنت، يجب تغيير ثلاثة إعدادات. تعرض DEBUG = True شيفرتك وكل أنماط عناوين URL لأي شخص. يوقّع SECRET_KEY الجلسات، لذا لا يمكن أن يبقى في شيفرة يقرأها الآخرون. تسرد ALLOWED_HOSTS النطاقات التي يستجيب لها الموقع.
الإجابة المعتادة: اقرأها من متغيرات البيئة، وهي قيم يوفّرها الخادم للبرنامج عند بدء تشغيله. تقرأ os.environ.get(name, default) أحدها، والقيمة الافتراضية هي ما يحصل عليه حاسوبك الشخصي:
PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "20"))
MAINTENANCE = os.environ.get("MAINTENANCE", "no") == "yes"المتغير دائمًا سلسلة نصية، لذا حوّله إلى النوع الذي تحتاجه: استخدم int() لرقم، ومقارنةً للحصول على قيمة منطقية حقيقية، وsplit(",") لقائمة. اختر قيمًا افتراضية آمنة: فالمتغير المنسي يُبقي DEBUG متوقفًا.
التحدي
متوسطفي mysite/settings.py، اقرأ من البيئة:
SECRET_KEYمنDJANGO_SECRET_KEY، والقيمة الافتراضية"django-insecure-change-me".DEBUG: تكونTrueفقط عندما تكونDJANGO_DEBUGهي"True".ALLOWED_HOSTSمنDJANGO_ALLOWED_HOSTS، مفصولة بفواصل، والقيمة الافتراضيةlocalhost,127.0.0.1.
اضغط على Run، ثم افتح /nope/: عند إيقاف DEBUG، لا تسرد صفحة 404 أي أنماط لعناوين URL.
جرّب بنفسك
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/"
جميع دروس واجهات API بصيغة JSON
تدرّب بنفسك: Playground لـ Django