Menu
CoddyTech

الملفات الثابتة للإنتاج

جزء من قسم واجهات API بصيغة JSON في رحلة Django على Coddy. الدرس 19 من 19.

في بيئة الإنتاج، يشغّل برنامج مثل Gunicorn تطبيق Django بدلًا من runserver، ولا يقدّم الملفات الثابتة مثل app.js. تُقدَّم هذه الملفات من مجلد واحد، بواسطة خادم الويب أو حزمة مثل WhiteNoise.

هذا المجلد هو STATIC_ROOT، وهو مسار مطلق. ينسخ الأمر python manage.py collectstatic ملفات static/ الخاصة بكل تطبيق إليه، وتُشغّله عند كل عملية نشر. من دون STATIC_ROOT، يتوقف التنفيذ مع ImproperlyConfigured.

تُنشأ المسارات في الإعدادات انطلاقًا من BASE_DIR، وهو المجلد الذي يحتوي على manage.py، باستخدام العامل / في pathlib. مجلد الملفات التي يحمّلها الزوار:

MEDIA_ROOT = BASE_DIR / "uploads"

قبل الإطلاق، يعرض الأمر python manage.py check --deploy الإعدادات غير الجاهزة.

challenge icon

التحدي

سهل

في mysite/settings.py، أسفل STATIC_URL، اضبط STATIC_ROOT على المجلد staticfiles المجاور لـ manage.py، كمسار مطلق.

اضغط على «تشغيل»، ثم في علامة تبويب «الصدفة»: تطبع from django.core.management import call_command; call_command("collectstatic", interactive=False) عدد الملفات التي نسخها.

جرّب بنفسك

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "django-insecure-change-me")
DEBUG = os.environ.get("DJANGO_DEBUG", "False") == "True"
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "localhost,127.0.0.1").split(",")

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/"
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس واجهات API بصيغة JSON

تدرّب بنفسك: Playground لـ Django