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. مجلد لصادرات الموقع:

EXPORTS_DIR = BASE_DIR / "data" / "exports"

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

challenge icon

التحدي

سهل

في mysite/settings.py، أسفل STATIC_URL، عيّن STATIC_ROOT إلى المجلد staticfiles بجوار manage.py، بوصفه مسارًا مطلقًا.

شغّل السطر أدناه في علامة تبويب Shell: سيطبع سطرًا مثل 127 static files copied، ومعظم هذه الملفات خاصة بلوحة الإدارة، ومن بينها tasks/app.js.

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