الإعدادات من البيئة
جزء من قسم واجهات 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، أضفimport os. - استبدل أسطر
SECRET_KEYوDEBUGوALLOWED_HOSTSالموجودة في البداية. تأتي قيمةSECRET_KEYمنDJANGO_SECRET_KEY، والقيمة الافتراضية هي"django-insecure-change-me". تكون قيمةDEBUGهيTrueفقط عندما تكون قيمةDJANGO_DEBUGهي النص"True". تُقسَّم قيمةDJANGO_ALLOWED_HOSTSعند الفواصل لتصبحALLOWED_HOSTS، والقيمة الافتراضية هيlocalhost,127.0.0.1.
افتح /nope/: سترى «غير موجود» فقط، دون قائمة بأنماط عناوين 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