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

التحدي

متوسط

في 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