أهم أحداث Django: الأصول الثابتة وملفات الوسائط (الجزء الرابع)

نشرت: 2022-03-10
ملخص سريع ↬ ينشئ مطورو ومصمموا الواجهة الأمامية أصولًا ثابتة مذهلة لتطبيقات الويب. اليوم ، نحن نركز على ما يحدث بعد دفع الإصلاح الجديد للنمط أو الرسم الجميل الذي انتهيت منه للتو إلى إتقان. سنحقق أيضًا في التعامل مع الملفات التي يقوم المستخدمون بتحميلها ، والتي تسمى ملفات الوسائط. معًا ، سنطور حدسًا للاستراتيجيات المتاحة لمطوري Django لخدمة هذه الملفات للمستخدمين في جميع أنحاء العالم بطريقة آمنة وفعالة وفعالة من حيث التكلفة.

تحتوي مواقع Django على الكثير من الملفات. إنها ليست مجرد شفرة مصدر للتكوين والنماذج وطرق العرض والقوالب ، ولكنها أيضًا الأصول الثابتة: CSS و JavaScript والصور والرموز. كما لو أن هذا لم يكن كافيًا بالفعل ، يأتي المستخدمون أحيانًا ويرغبون في تحميل ملفاتهم الخاصة على موقع الويب الخاص بك. يكفي أن تجعل أي مطور لا يصدق. الملفات في كل مكان!

هذا هو المكان الذي أتمنى أن أقول فيه (بدون محاذير): "لا تقلق ، جانغو يساندك!" لكن لسوء الحظ ، عند التعامل مع الأصول الثابتة وملفات الوسائط ، هناك الكثير من المحاذير التي يجب التعامل معها.

اليوم ، سنعالج تخزين الملفات وتقديمها لكل من عمليات النشر أحادية الخادم وعمليات النشر القابلة للتطوير مع مراعاة عوامل مثل الضغط والتخزين المؤقت والتوافر. سنناقش أيضًا تكاليف وفوائد شبكات CDN وحلول تخزين الملفات المخصصة.

ملاحظة : هذا ليس برنامجًا تعليميًا حول كيفية نشر موقع Django على أي منصة محددة. بدلاً من ذلك ، مثل المقالات الأخرى في سلسلة Django Highlights (انظر أدناه) ، فإن الغرض منه هو أن يكون دليلاً لمطوري ومصممي الواجهة الأمامية لفهم الأجزاء الأخرى من عملية إنشاء تطبيق ويب. اليوم ، نحن نركز على ما يحدث بعد دفع الإصلاح الجديد للنمط أو الرسم الجميل الذي انتهيت منه للتو إلى إتقان. معًا ، سنطور حدسًا للاستراتيجيات المتاحة لمطوري Django لخدمة هذه الملفات للمستخدمين في جميع أنحاء العالم بطريقة آمنة وفعالة وفعالة من حيث التكلفة.

الأجزاء السابقة في السلسلة:

  • الجزء 1: نماذج المستخدم والمصادقة
  • الجزء 2: قوالب حفظ الخطوط
  • الجزء 3: النماذج ، والإدارة ، وتسخير قاعدة البيانات العلائقية
المزيد بعد القفز! أكمل القراءة أدناه ↓

تعريفات

معظم هذه المصطلحات واضحة ومباشرة ، لكن الأمر يستحق بعض الوقت لإنشاء مفردات مشتركة لهذه المناقشة.

الأنواع الثلاثة للملفات في تطبيق Django المباشر هي:

  1. مصدر الرمز
    ملفات Python و HTML التي تم إنشاؤها باستخدام إطار عمل Django. هذه الملفات هي جوهر التطبيق. ملفات التعليمات البرمجية المصدر صغيرة جدًا بشكل عام ، ويتم قياسها بالكيلو بايت.
  2. ملفات ثابتة
    تُعرف أيضًا باسم "الأصول الثابتة" ، وتشمل هذه الملفات CSS و JavaScript ، وكلاهما مكتوب بواسطة مطور التطبيق ومكتبات الطرف الثالث ، بالإضافة إلى ملفات PDF ومثبتات البرامج والصور والموسيقى ومقاطع الفيديو والرموز. يتم استخدام هذه الملفات فقط من جانب العميل. تتراوح الملفات الثابتة من بضعة كيلوبايت من CSS إلى غيغابايت من الفيديو.
  3. ملفات الوسائط
    يُطلق على أي ملف تم تحميله بواسطة مستخدم ، من صور الملف الشخصي إلى المستندات الشخصية ، ملف وسائط. يجب تخزين هذه الملفات واسترجاعها للمستخدم بشكل آمن وموثوق. يمكن أن تكون ملفات الوسائط بأي حجم ، فقد يقوم المستخدم بتحميل بضعة كيلوبايت من النص العادي إلى بضع غيغابايت من الفيديو. إذا كنت في النهاية الأخيرة من هذا المقياس ، فربما تحتاج إلى المزيد من النصائح المتخصصة أكثر من هذه المقالة المعدة لتقديمها.

نوعا نشر Django هما:

  1. خادم واحد
    إن نشر Django على خادم واحد هو بالضبط ما يبدو عليه الأمر: كل شيء يعيش على خادم واحد. هذه الإستراتيجية بسيطة للغاية وتشبه إلى حد بعيد بيئة التطوير ، ولكنها لا تستطيع التعامل مع كميات كبيرة أو غير متسقة من حركة المرور بشكل فعال. نهج الخادم الفردي قابل للتطبيق فقط لمشاريع التعلم أو العرض التوضيحي ، وليس تطبيقات الكلمات الحقيقية التي تتطلب وقت تشغيل موثوق به.
  2. القابلة للتطوير
    هناك العديد من الطرق المختلفة لنشر مشروع Django الذي يسمح له بالتوسع لتلبية طلب المستخدمين. غالبًا ما تتضمن هذه الاستراتيجيات الدوران لأعلى ولأسفل العديد من الخوادم واستخدام أدوات مثل موازين التحميل وقواعد البيانات المدارة. لحسن الحظ ، يمكننا جمع كل شيء أكثر تعقيدًا من نشر خادم واحد في هذه الفئة بشكل فعال لأغراض هذه المقالة.

الخيار 1: افتراضي Django

تستفيد المشاريع الصغيرة من الهندسة المعمارية البسيطة. معالجة Django الافتراضية للأصول الثابتة وملفات الوسائط هي: بسيطة. لكل منها ، لديك مجلد جذر يخزن الملفات ويعيش بجوار الكود المصدري على الخادم. بسيط. يتم إنشاء مجلدات الجذر هذه وإدارتها في الغالب من خلال تكوين المشروع / الإعدادات .

الأصول الثابتة

أهم شيء يجب فهمه عند التعامل مع الملفات الثابتة في Django هو أمر python manage.py collectstatic . ينتقل هذا الأمر عبر المجلد الثابت لكل تطبيق في مشروع Django وينسخ جميع الأصول الثابتة إلى المجلد الجذر. تشغيل هذا الأمر هو جزء مهم من نشر مشروع Django. ضع في اعتبارك بنية الدليل التالية:

 - project - project - settings.py - urls.py - ... - app1 - static/ - app1 - style.css - script.js - img.jpg - templates/ - views.py - ... - app2 - static/ - app2 - style.css - image.png - templates/ - views.py - ...

افترض أيضًا الإعدادات التالية في project / settings.py :

 STATIC_URL = "/static/" STATIC_ROOT = "/path/on/server/to/djangoproject/static"

سيؤدي تشغيل الأمر python manage.py collectstatic إلى إنشاء المجلد التالي على الخادم:

 - /path/on/server/to/djangoproject/static - app1 - style.css - script.js - img.jpg - app2 - style.css - image.png

لاحظ أنه داخل كل مجلد ثابت ، يوجد مجلد آخر باسم التطبيق. هذا لمنع التعارضات في مساحات الأسماء بعد تجميع الملفات الثابتة؛ كما ترى في بنية الملف أعلاه ، فإن هذا يحافظ على تميز app1 / style.css و app2 / style.css . من هنا ، سيبحث التطبيق عن الملفات الثابتة في هذا الهيكل في STATIC_ROOT أثناء الإنتاج. على هذا النحو ، قم بالإشارة إلى الملفات الثابتة على النحو التالي في قالب في app1 / Templates / :

 {% load static %} <link rel="stylesheet" type="text/css" href="{% static "app1/style.css" %}">

يكتشف Django تلقائيًا مكان الحصول على الملف الثابت من التطوير لنمذجة هذا السلوك ، لا تحتاج إلى تشغيل collectstatic أثناء التطوير.

لمزيد من التفاصيل ، راجع وثائق Django.

ملفات الوسائط

تخيل موقع شبكة احترافي يحتوي على قاعدة بيانات للمستخدمين. سيكون لكل من هؤلاء المستخدمين ملف تعريف مرتبط ، والذي قد يحتوي ، من بين أشياء أخرى ، على صورة أفاتار ووثيقة سيرة ذاتية. فيما يلي مثال قصير على نموذج لتلك المعلومات:

 from django.db import models from django.contrib.auth.models import User def avatar_path(instance, filename): return "avatar_{}_{}".format(instance.user.id, filename) class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) resume = models.FileField(upload_to="path/string") avatar = models.ImageField(upload_to=avatar_path)

لكي يعمل هذا ، تحتاج إلى الخيارات التالية في project / settings.py ، مثل الأصول الثابتة:

 MEDIA_URL = "/media/" MEDIA_ROOT = "/path/on/server/to/media"

يرث ImageField من FileField ، لذلك فهو يشترك في نفس المعلمات والإمكانيات. يحتوي كلا الحقلين على وسيطة upload_to اختيارية ، والتي تأخذ سلسلة تمثل مسارًا وتلحقها بـ MEDIA_ROOT لتخزين الملف ، والذي يمكن الوصول إليه بعد ذلك بنفس المسار أعلى MEDIA_URL . يمكن أن تأخذ الوسيطة upload_to وظيفة تقوم بإرجاع سلسلة ، كما هو موضح في الدالة avatar_path .

تأكد من حذف دليل ملفات الوسائط ومحتوياته من التحكم في الإصدار. قد تتعارض محتوياته عندما يقوم مطوران باختبار نفس التطبيق على أجهزة مختلفة ، وهو ، على عكس الأصول الثابتة ، ليس جزءًا من تطبيق Django القابل للنشر.

الخيار 2: Django With Services

فلسفتي التوجيهية هي استخدام الأدوات لتحقيق أفضل ما لديهم. يعد Django إطارًا رائعًا ، ويوفر أدوات رائعة خارج الصندوق لمصادقة المستخدم ، والعرض من جانب الخادم ، والعمل مع النماذج والنماذج ، والوظائف الإدارية ، وعشرات الجوانب الأساسية الأخرى لبناء تطبيقات الويب. ومع ذلك ، فإن أدواته للتعامل مع الأصول الثابتة وملفات الوسائط ليست ، في رأيي ، مناسبة تمامًا للإنتاج على مواقع قابلة للتطوير. يدرك مطورو Django الأساسيون أن العديد من الأشخاص يختارون طرقًا بديلة للتعامل مع هذه الملفات في الإنتاج ؛ إطار العمل جيد جدًا في الابتعاد عن طريقك عندما تفعل ذلك. ستحتاج معظم مواقع Django المخصصة للاستخدام العام إلى دمج الأصول الثابتة والتعامل مع ملفات الوسائط باستخدام هذه الأساليب غير الخاصة بـ Django.

الأصول الثابتة على CDN

في حين أن المشاريع الصغيرة إلى المتوسطة يمكن أن تفلت بدون واحدة ، فإن شبكة توصيل المحتوى (CDN) سهلة الاستخدام وتحسن أداء التطبيقات من أي حجم. شبكة CDN عبارة عن شبكة من الخوادم ، في جميع أنحاء العالم بشكل عام ، توزع وتخدم محتوى الويب ، ومعظمها أصول ثابتة. تشمل شبكات CDN الشائعة Cloudflare CDN و Amazon CloudFront و Fastly. لاستخدام CDN ، يمكنك تحميل ملفاتك الثابتة ، ثم الرجوع إليها في التطبيق الخاص بك على النحو التالي:

 <link rel="stylesheet" type="text/css" href="https://cdn.example.com/path/to/your/files/app1/style.css">

هذه العملية سهلة للتكامل مع البرامج النصية لنشر Django. بعد تشغيل الأمر python manage.py collectstatic ، انسخ الدليل الذي تم إنشاؤه إلى CDN الخاص بك (وهي عملية تختلف بشكل كبير بناءً على الخدمة التي تستخدمها) ، ثم أزل الأصول الثابتة من حزمة نشر Django.

في مرحلة التطوير ، سترغب في الوصول إلى نسخ مختلفة من أصولك الثابتة عن تلك الموجودة في الإنتاج. بهذه الطريقة ، يمكنك إجراء تغييرات محليًا دون التأثير على موقع الإنتاج. يمكنك إما استخدام الأصول المحلية أو تشغيل مثيل ثانٍ من CDN لتسليم الملفات. قم بتكوين مشروعك / settings.py باستخدام بعض المتغيرات المخصصة ، مثل CDN_URL ، واستخدم هذه القيمة في القوالب الخاصة بك للتأكد من أنك تستخدم الإصدار الصحيح من الأصول في التطوير والإنتاج.

ملاحظة أخيرة هي أن العديد من مكتبات CSS و JavaScript لديها شبكات CDN مجانية يمكن لمعظم مواقع الويب استخدامها. إذا كنت تقوم بتحميل ، على سبيل المثال ، Bootstrap 4 أو undercore.js ، فيمكنك تخطي متاعب استخدام نسختك الخاصة في التطوير وتكاليف خدمة نسخك الخاصة في الإنتاج باستخدام شبكات CDN العامة هذه.

ملفات الوسائط مع ملف مخصص

لا يجب أن يقوم موقع Django الخاص بالإنتاج بتخزين ملفات المستخدم في مجلد بسيط / وسائط / في مكان ما على الخادم الذي يدير الموقع. فيما يلي ثلاثة من الأسباب العديدة لعدم القيام بذلك:

  1. إذا كنت بحاجة إلى توسيع نطاق الموقع عن طريق إضافة خوادم متعددة ، فأنت بحاجة إلى طريقة ما لنسخ ومزامنة الملفات التي تم تحميلها عبر تلك الخوادم.
  2. في حالة تعطل الخادم ، يتم نسخ الكود المصدري احتياطيًا في نظام التحكم في الإصدار الخاص بك ، ولكن لا يتم نسخ ملفات الوسائط احتياطيًا بشكل افتراضي ، إلا إذا قمت بتهيئة الخادم الخاص بك للقيام بذلك ، ولكن لهذا الجهد سيكون أفضل حالًا باستخدام برنامج مخصص ملف.
  3. في حالة وجود نشاط ضار ، من الأفضل إلى حد ما الاحتفاظ بالملفات التي تم تحميلها بواسطة المستخدم على خادم منفصل عن الخادم الذي يقوم بتشغيل التطبيق ، على الرغم من أن هذا لا يزيل بأي حال من الأحوال مطلب التحقق من صحة الملفات التي تم تحميلها بواسطة المستخدم.

يعد دمج طرف ثالث لتخزين الملفات التي تم تحميلها بواسطة المستخدم أمرًا سهلاً حقًا. لست بحاجة إلى تغيير أي شيء في التعليمات البرمجية الخاصة بك ، باستثناء ربما إزالة أو تعديل قيمة upload_to لـ FileField s في النماذج الخاصة بك ، وتكوين بعض الإعدادات. على سبيل المثال ، إذا كنت تخطط لتخزين ملفاتك في AWS S3 ، فأنت تريد القيام بما يلي ، والذي يشبه إلى حد بعيد عملية تخزين الملفات باستخدام Google Cloud أو Azure أو Backblaze أو الخدمات المنافسة المماثلة.

أولاً ، ستحتاج إلى تثبيت مكتبات boto3 و django-storages storages. بعد ذلك ، تحتاج إلى إعداد دور الحاوية و IAM على AWS ، والذي يقع خارج نطاق هذه المقالة ، ولكن يمكنك الاطلاع على الإرشادات الخاصة بذلك هنا. بمجرد تكوين كل ذلك ، ستحتاج إلى إضافة ثلاثة متغيرات إلى مشروعك / settings.py :

 DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage" AWS_STORAGE_BUCKET_NAME = "BUCKET_NAME" AWS_S3_REGION_NAME = "us-east-2"

بالإضافة إلى ذلك ، ستحتاج إلى إعداد وصول بيانات الاعتماد إلى حاوية AWS الخاصة بك. ستوضح بعض البرامج التعليمية إضافة معرّف ومفتاح سري إلى ملف الإعدادات الخاص بك أو كمتغيرات بيئة ، لكن هذه ممارسات غير آمنة. بدلاً من ذلك ، استخدم django-storages مع AWS CLI لتكوين المفاتيح ، كما هو موضح هنا. قد تكون مهتمًا أيضًا بوثائق django-storages .

لا تريد أن يختلط تطوير أو اختبار ملفات الوسائط بالتحميلات من المستخدمين الفعليين. يعد تجنب ذلك أمرًا بسيطًا للغاية: قم بإعداد مجموعات متعددة ، واحدة للتطوير (أو واحدة لكل مطور) ، وواحدة للاختبار ، وواحدة للإنتاج. بعد ذلك ، كل ما تحتاج إلى تغييره هو إعداد AWS_STORAGE_BUCKET_NAME لكل بيئة وأنت على ما يرام.

الأداء والتوافر

هناك العديد من العوامل التي تؤثر على أداء وموثوقية موقع الويب الخاص بك. فيما يلي بعض العناصر المهمة عند التفكير في الملفات الثابتة والمتعلقة بالوسائط بغض النظر عن النهج الذي تتبعه لإدارتها.

يكلف

يكلف تقديم الملفات للمستخدم أموالاً لسببين: التخزين وعرض النطاق الترددي. عليك أن تدفع لمزود الاستضافة لتخزين الملفات نيابة عنك ، ولكن عليك أيضًا أن تدفع لهم مقابل خدمة الملفات. يعد النطاق الترددي أكثر تكلفة بكثير من التخزين (على سبيل المثال ، تتقاضى AWS S3 رسومًا تبلغ 2.3 سنتًا لكل جيجا بايت للتخزين مقابل 9 سنتات لكل جيجا بايت من نقل البيانات إلى الإنترنت في وقت كتابة هذا التقرير). تختلف اقتصاديات متجر الملفات مثل S3 أو CDN عن اقتصاديات مضيف عام مثل قطرة المحيط الرقمي. استفد من التخصص ووفورات الحجم عن طريق نقل الملفات باهظة الثمن إلى الخدمات المصممة لهم. علاوة على ذلك ، تقدم العديد من مخازن الملفات وشبكات CDN خططًا مجانية بحيث يمكن للمواقع التي قد تكون صغيرة بما يكفي للهروب من دون استخدامها ، بدلاً من ذلك ، القيام بذلك وجني الفوائد دون أي تكاليف إضافية للبنية التحتية.

الضغط والتحويل

ترجع معظم المشكلات التي تسببها الأصول الثابتة مثل الصور ومقاطع الفيديو إلى أنها ملفات كبيرة. بطبيعة الحال ، يعالج المطورون هذا من خلال محاولة تصغير هذه الملفات. هناك عدد من الطرق للقيام بذلك باستخدام مزيج من الضغط وتحويل الشفرات في فئتين عامتين: بدون خسارة وفقدان. يحتفظ الضغط بدون فقد الجودة الأصلية للأصول ولكنه يوفر انخفاضًا طفيفًا نسبيًا في حجم الملف. يسمح الضغط الخاسر ، أو تحويل الترميز إلى تنسيق ضياع ، بأحجام ملفات أصغر بكثير على حساب فقدان بعض جودة الأداة الأصلية. مثال على ذلك هو تحويل ترميز الفيديو إلى معدل بت أقل. لمزيد من التفاصيل ، راجع هذه المقالة حول تحسين توصيل الفيديو. عند تقديم ملفات كبيرة عبر الويب ، غالبًا ما تتطلب سرعات النطاق الترددي تقديم أدوات مضغوطة للغاية ، مما يتطلب ضغطًا مع فقدان البيانات.

ما لم تكن على YouTube ، فإن الضغط وتحويل الشفرات لا يحدثان بسرعة. يجب تنسيق الأصول الثابتة بشكل مناسب قبل النشر ، ويمكنك فرض قيود على نوع الملف الأساسي وحجم الملف على عمليات تحميل المستخدم لضمان الضغط الكافي والتنسيق المناسب في ملفات الوسائط الخاصة بالمستخدمين.

تصغير

على الرغم من أن ملفات JavaScript و CSS ليست عادةً كبيرة مثل الصور ، إلا أنه يمكن ضغطها في كثير من الأحيان للضغط في عدد أقل من وحدات البايت. هذه العملية تسمى التصغير. لا يغير التصغير من تشفير الملفات ، فهي لا تزال نصية ، ولا يزال الملف المصغر بحاجة إلى رمز صالح للغته الأصلية. الملفات المصغرة تحتفظ بامتداداتها الأصلية.

الشيء الرئيسي الذي تتم إزالته في ملف مصغر هو المسافات البيضاء غير الضرورية ، ومن منظور الكمبيوتر ، فإن كل المسافات البيضاء تقريبًا في CSS وجافا سكريبت غير ضرورية. تعمل مخططات التصغير أيضًا على تقصير أسماء المتغيرات وإزالة التعليقات.

يؤدي التصغير افتراضيًا إلى تشويش الكود ؛ كمطور ، يجب أن تعمل حصريًا مع الملفات غير المصغرة. يجب أن تقلل بعض الخطوات التلقائية أثناء عملية النشر من الملفات قبل تخزينها وتقديمها. إذا كنت تستخدم مكتبة مقدمة من طرف ثالث CDN ، فتأكد من أنك تستخدم الإصدار المصغر من تلك المكتبة إذا كان ذلك متاحًا. يمكن تصغير ملفات HTML ، ولكن نظرًا لأن Django يستخدم العرض من جانب الخادم ، فمن المرجح أن تفوق تكلفة المعالجة للقيام بذلك أثناء التنقل الانخفاض الطفيف في حجم الصفحة.

التوفر العالمي

تمامًا مثلما يستغرق إرسال خطاب إلى جارك وقتًا أقل مما يستغرقه لإرساله عبر البلد ، لذلك يستغرق الأمر وقتًا أقل لنقل البيانات في مكان قريب منه في جميع أنحاء العالم. إحدى الطرق التي تحسن بها CDN أداء الصفحة هي نسخ الأصول على الخوادم في جميع أنحاء العالم. بعد ذلك ، عندما يقدم العميل طلبًا ، يتلقى الأصول الثابتة من أقرب خادم (غالبًا ما يسمى عقدة الحافة) ، مما يقلل من أوقات التحميل. تتمثل إحدى مزايا استخدام CDN مع موقع Django في فصل التوزيع العالمي لأصولك الثابتة عن التوزيع العالمي لشفرتك.

التخزين المؤقت من جانب العميل

ما هو أفضل من وجود ملف ثابت على خادم بالقرب من المستخدم الخاص بك؟ وجود الملف الثابت المخزن بالفعل على جهاز المستخدم الخاص بك! التخزين المؤقت هو عملية تخزين نتائج الحساب أو الطلب بحيث يمكن الوصول إليها بشكل متكرر بسرعة أكبر. تمامًا مثل ورقة أنماط CSS التي يمكن تخزينها مؤقتًا في جميع أنحاء العالم في CDN ، يمكن تخزينها مؤقتًا في متصفح العميل في المرة الأولى التي يقوم فيها بتحميل صفحة من موقعك. بعد ذلك ، تتوفر ورقة الأنماط على الجهاز نفسه في الطلبات اللاحقة ، وبالتالي فإن العميل يقوم بطلبات أقل ، وتحسين وقت تحميل الصفحة ، وتقليل استخدام النطاق الترددي.

تقوم المتصفحات بإجراء عمليات التخزين المؤقت الخاصة بها ، ولكن إذا كان موقعك يتمتع بحركة مرور كبيرة ، فيمكنك تحسين سلوك التخزين المؤقت من جانب العميل باستخدام إطار عمل Django لذاكرة التخزين المؤقت.

ختاما

مرة أخرى ، تتمثل فلسفتي التوجيهية في استخدام الأدوات لتحقيق أفضل ما لديهم. يمكن لمشاريع الخادم الفردي وعمليات النشر الصغيرة القابلة للتطوير مع الأصول الثابتة خفيفة الوزن فقط استخدام إدارة الأصول الثابتة المضمنة في Django ، ولكن يجب على معظم التطبيقات فصل الأصول ليتم تقديمها عبر CDN.

إذا كان مشروعك مخصصًا لأي نوع من استخدام الكلمات الحقيقية ، فلا تقم بتخزين ملفات الوسائط باستخدام طريقة Django الافتراضية ، وبدلاً من ذلك استخدم خدمة. مع وجود عدد كافٍ من الزيارات ، حيث تكون "حركة المرور الكافية" عددًا صغيرًا نسبيًا على نطاق الإنترنت ، فإن المضاعفات الإضافية للهندسة وعملية التطوير والنشر تستحق أكثر من ذلك من أجل الأداء والموثوقية وتوفير التكاليف باستخدام حل تخزين CDN وملف منفصل للملفات الثابتة والوسائط ، على التوالي.

اقتراحات للقراءة

  • الجزء 1: نماذج المستخدم والمصادقة
  • الجزء 2: قوالب حفظ الخطوط
  • الجزء 3: النماذج ، والإدارة ، وتسخير قاعدة البيانات العلائقية