Menu
CoddyTech

الإعدادات من البيئة

جزء من قسم واجهات 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 متوقفًا.

challenge icon

التحدي

متوسط

اقرأ ثلاثة إعدادات من البيئة.

  1. في أعلى الملف mysite/settings.py، أضف import os.
  2. استبدل أسطر 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