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