Django / الصحة ودليل الإنتاج / الدرس 16
الأصول والوسائط والنشر
افصل أصول التطبيق عن المرفوعات ونسق آثار البناء والتخزين وحد الطلب الإنتاجي.
في هذه الصفحة
أهداف الدرس
- اختلاف ثقة static وmedia
- فحص الاكتشاف بأصل مؤقت معزول
- مراجعة حد الإنتاج كاملا
اختلاف ثقة static وmedia
الأصول ملفات التطبيق كالتنسيق والسكربت، والمرفوعات بيانات مستخدم بثقة وحفظ مختلفين. لا تضعها بمسار تنفيذي. حدد الحجم والمحتوى والإذن والمالك؛ لا يحمي العنوان العام الخاص وقد يحتاج تنزيلًا مفوضا. لا تثق بالاسم والنوع ولا تفسرها قالبا أو شفرة. اعكس الفصل بنية التخزين. وقد يحتاج الملف الخاص إلى عرض تنزيل مفوض أو آلية تسليم أخرى؛ فلا يكفي أن يكون اسمه صعب التخمين أو أن يختفي رابطه من الصفحة.
الاكتشاف والجمع والتقديم مراحل منفصلة
تعثر المحملات على المصدر ثم يجمعه البناء ويقدمه خادم أو مخزن أو وسيط مراجع. لا يثبت التطوير الإنتاج. تحدد STATIC_URL بادئة وSTATIC_ROOT وجهة الجمع وSTATICFILES_DIRS المصادر؛ يربك خلطها وقد يستبدل أصلا. استخدم نطاقات مسارات لتجنب style.css العامة. ولا يعوض نجاح محمل الملفات إعداد الخادم أو خدمة التخزين، لأن العثور على المصدر وجمعه ونشره وتقديمه مراحل يمكن أن تفشل كل منها مستقلة.
فحص الاكتشاف بأصل مؤقت معزول
يكتب البرنامج CSS مصطنعة بمجلده المؤقت ويبحث عن مسارها ويطبع الاسم الثابت ثم ينظف. يثبت اكتشافا محليا لا الجمع والنشر والتخزين والعرض. لا يمس المشروع. يميز الحد الضيق الملف المفقود والمصدر الخاطئ وفشل التقديم بدلا من اعتبار كل 404 مشكلة واحدة. ويزيل سياق المجلد المؤقت الملف الذي أنشأته التجربة عند الخروج، فلا تعد النتيجة دليلا على وجود أصل في مشروع العمل أو صلاحيات نشره.
from django.conf import settings
settings.configure(
SECRET_KEY="synthetic-course-key",
USE_I18N=False, USE_TZ=True,
INSTALLED_APPS=[],
DATABASES={"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": ":memory:"}},
DEFAULT_AUTO_FIELD="django.db.models.AutoField",
ALLOWED_HOSTS=["testserver"],
)
import django
django.setup()
from pathlib import Path
from tempfile import TemporaryDirectory
from django.contrib.staticfiles.finders import FileSystemFinder
from django.test import override_settings
with TemporaryDirectory() as directory:
asset = Path(directory) / "catalog" / "style.css"
asset.parent.mkdir()
asset.write_text("body { color: navy; }", encoding="utf-8")
with override_settings(STATICFILES_DIRS=[directory], STATIC_ROOT=None):
found = FileSystemFinder().find("catalog/style.css")
print(Path(found).name)
style.css
ينشئ أصله المؤقت وينظفه ويختبر البحث لا التقديم والجمع.
استخدام إعداد التخزين الحديث عن قصد
يستخدم المقطع STORAGES في 5.2 افتراضيًا وmanifest للأصول، ولا يشكل نشرا كاملا. يحتاج المعالج بناء الملفات والتعيين المتسق. استخدم static لا تجزئات مكتوبة. لا يجمع الإعداد أو يضبط الوكيل وحده. احفظ أصول النسخة القديمة عند النشر المتوافق ولا تساو الإبطال بحذف مستخدم حي. ويجب أن يخرج manifest والملفات المعالجة من بناء متسق واحد، وألا يحذف النشر الجديد ما زالت صفحات أو نسخ قديمة حية تشير إليه.
STATIC_URL = "/static/"
STATIC_ROOT = "/srv/training-app/static-artifact"
MEDIA_ROOT = "/srv/training-app/uploads"
STORAGES = {
"default": {"BACKEND": "django.core.files.storage.FileSystemStorage"},
"staticfiles": {"BACKEND": "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"},
}
Configuration separates the collected static artifact from uploaded media and selects manifest-based static storage.
إعداد توضيحي يتطلب بناء وصلاحيات وتقديما مراجعا ولا ينشئ مجلدا أو يجمع وينشر.
مراجعة حد الإنتاج كاملا
اختر خادم WSGI أو ASGI وإشرافا مراجعا لا خادم التطوير. نسق الإعداد والأسرار وTLS والثقة والمضيف والقاعدة والملفات والمهل والاستعادة. تفيد فحوص النشر ولا تثبت الأمن والصحة والاستعادة. اختبر المراجع والبادئة والتخزين والغياب والتراجع. يكتفي المقرر بالمحلي ولا يبدأ خادما أو ينشئ خارجيا أو ينفذ نشر تطبيق. ويجب اختبار التراجع إلى أثر سابق مع الأصول التي يحتاجها، لا مجرد إمكان تبديل الشفرة، لأن توافق الملفات جزء من صحة الإصدار أيضا.
الأخطاء الشائعة وإصلاحها
تفشل الأصول إنتاجيا رغم التطوير
- لماذا يحدث؟
- اختلط البحث بالتقديم.
- كيف تصلحه؟
- افحص الأثر والبادئة والتقديم.
- كيف تتجنب تكراره؟
- اختبر المراجع بمسار النشر.
يفشل manifest بعد النشر
- لماذا يحدث؟
- لا يطابق الملفات والأثر.
- كيف تصلحه؟
- انشر بناء متسقا.
- كيف تتجنب تكراره؟
- افحص قبل التحويل واحفظ المتوافق.
تقدم المرفوعات أصولا تنفيذية
- لماذا يحدث؟
- تشارك حد ثقة خاطئا.
- كيف تصلحه؟
- افصل معالجتها وتقديمها.
- كيف تتجنب تكراره؟
- راجع الأنواع والإذن والملكية.
اختبر فهمك
1. لماذا لا يثبت العثور على الملف عمل عنوانه العام؟
اعرض الحل المشروح
يثبت المصدر فقط وتبقى مراحل الجمع والمعالجة والنشر والخادم والبادئة والمتصفح؛ اختبرها بمسار وأثر النشر لا الاستنتاج من الملف.
2. ماذا تحفظ عند بقاء HTML قديمة تشير لأصول قديمة؟
اعرض الحل المشروح
احفظ المطلوب بنافذة التوافق أو نسق الأعمار كي لا ينقطع العميل. قد يكسر الحذف الفوري صفحات سليمة؛ حدد الحفظ والتراجع مع المالك.
أهم ما تعلمته
- البحث والجمع والتقديم مختلفة.
- ليست المرفوعات أصولا موثوقة.
- انشر آثارا متوافقة قابلة للمراجعة.