الملفات الثابتة للإنتاج
جزء من قسم واجهات 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 الإعدادات غير الجاهزة.
التحدي
سهلفي 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/"
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس واجهات API بصيغة JSON
تدرّب بنفسك: Playground لـ Django