ملف إعدادات Django – شرح خطوة بخطوة

0

 

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

لنأخذ مثالا :

1
2
3
4
5
6
// Create a Django Project "mysite"
django-admin startproject mysite
 
cd /pathTo/mysite
// Create a Django app "polls" inside project "mysite"
python manage.py startapp App_name

بعدها سيصبح هيكلة المشروع على الشكل التالي :

1
2
3
4
5
6
7
mysite            mysite                
            -> __init__.py
            -> asgi.py
            -> settings.py     urls.py
            -> wsgi.py
    --> manage.py
    --> polls

رؤى حول ملف settings.py

عند إنشاء مشروع Django جديد باستخدام الأمر django-admin startproject ، يتم إنشاء ملف settings.py افتراضي داخل دليل مشروعك، يحتوي هذا الملف على مجموعة من الإعدادات التي تم تكوينها مسبقًا والتي يمكنك استخدامها كنقطة بداية لتطبيقك

سنقوم بمناقشة النقاط المهمة و الإعدادات الافتراضية في ملف settings.py الخاص بـ Django.

نظرًا لأن ملف الإعدادات هو وحدة Python ، فإن ما يلي ينطبق: * لا يسمح بأخطاء بناء جمل بايثون. * يمكنه تعيين الإعدادات ديناميكيًا باستخدام بناء جملة Python العادي. * يمكنه استيراد القيم من ملفات الإعدادات الأخرى.

BASE_DIR

يشير BASE_DIR إلى التسلسل الهرمي العلوي للمشروع وهو مفيد في إنشاء مسارات الملفات في جميع أنحاء التطبيق، ومهما كانت المسارات التي نحددها في المشروع ستكون كلها مرتبطة بـ BASE_DIR، و لاستخدام BASE_DIR سيتعين علينا استخدام وحدة نظام التشغيل os المقدمة من Python.

1
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DEBUG

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

1
DEBUG = True  // It is Default value and is preferred in only Development Phase.

عند إطلاق الموقع على الأنترنيت، يجب تبديل قيمة DEBUG = False.

ALLOWED_HOSTS

ALLOWED_HOSTS هي قائمة تحتوي على عناوين لجميع المجالات التي يمكنها تشغيل مشروع Django الخاص بك، و بشكل افتراضي يكون المتغير ALLOWED_HOSTS في settings.py فارغًا

هذا إجراء أمني لمنع هجمات رأس HTTP Host حيث يتم إجراء التحقق لمنع المستخدمين المحتالين من إرسال رؤوس مضيف HTTP مزيفة يمكن أن تؤدي إلى إفساد ذاكرة التخزين المؤقت ورسائل البريد الإلكتروني لإعادة تعيين كلمة المرور مع روابط إلى مضيفين ضارين، والتي تكون ممكنة حتى في ظل العديد من تكوينات خادم الويب التي تبدو آمنة.

إذا قمت بتبديل قيمة DEBUG إلى False وتركت ALLOWED_HOSTS فارغًا ، سيرفض Django تقديم الطلبات وبدلاً من ذلك يستجيب بصفحات طلبات HTTP 400 سيئة ، لأنه لا يمكنه التحقق من صحة رؤوس HTTP Host الواردة.

1
2
3
4
When DEBUG set to True
ALLOWED_HOSTS can be an empty list i.e. ALLOWED_HOSTS=[ ] because by Default it is 127.0.0.1 or localhost
When DEBUG set to False
ALLOWED_HOSTS can not be an empty list. ALLOWED_HOSTS=[“127.0.0.1”, “*.site.com”].

INSTALLED_APPS

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

يستخدم Django INSTALLED_APPS كقائمة للبحث عن النماذج وأوامر الإدارة والاختبارات والأدوات المساعدة الأخرى.

1
2
3
4
  INSTALLED_APPS = [
        // Some preloaded apps by Django,
        'polls',
]

DATABASES

يدعم Django رسميًا قواعد البيانات التالية:

  • PostgreSQL
  • MariaDB
  • MySQL
  • Oracle
  • SQLite <– إفتراضيا

يحدد هذا الإعداد تكوينات قاعدة البيانات للتطبيق الخاص بك. بشكل افتراضي تستخدم مشاريع Django SQLite كمحرك قاعدة البيانات، ولكن يمكنك التبديل بسهولة إلى محركات قواعد البيانات الأخرى مثل PostgreSQL أو MySQL.

1
2
3
4
5
6
DATABASES = {
       'default': {
           'ENGINE': 'django.db.backends.sqlite3',
           'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
       }
   }

ROOT Variables

متغيرات الجذر هي مسارات مطلقة. تُستخدم هذه المتغيرات لاسترداد الملفات سواء كانت وسائط أو ثابتة.

MEDIA_ROOT

MEDIA_ROOT هو مسار مطلق يستخدم هذا المتغير لاسترداد ملفات الوسائط.

1
MEDIA_ROOT= os.path.join(BASE_DIR, 'media')

STATIC_ROOT:

STATIC_ROOT هو مسار مطلق يستخدم هذا المتغير لاسترداد الملفات الثابتة.

1
STATIC_ROOT= os.path.join(BASE_DIR, 'static')

ملاحظة: جميع أسماء المتغيرات في إعدادات Django مكتوبة بالأحرف الكبيرة.

SECRET_KEY

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

ملفات تعريف الارتباط في Django

TEMPLATES

يقوم هذا الإعداد بتكوين محركات القوالب والأدلة التي يستخدمها Django لعرض صفحات HTML في تطبيقك.

أفضل الممارسات لتنظيم إعدادات Django

يعد تنظيم إعدادات Django بشكل فعال أمرًا بالغ الأهمية لقابلية الصيانة والتوسع والأمان لتطبيقك. فيما يلي بعض أفضل الممارسات لتنظيم إعدادات Django:

استخدم بنية إعدادات معيارية :

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

الاستفادة من متغيرات البيئة:

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

احتفظ بالملفات الحساسة خارج نطاق التحكم في الإصدار:

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

تنظيم الإعدادات بشكل منطقي :

قم بتجميع الإعدادات ذات الصلة معًا واستخدام التعليقات، هذا يجعل ملفات الإعدادات الخاصة بك أسهل للقراءة والصيانة.

استخدم أذونات الملفات المناسبة:

تقييد الوصول إلى الملفات الحساسة، مثل ملفات الإعدادات التي تحتوي على بيانات اعتماد أو ملفات .env ، من خلال تعيين أذونات الملفات المناسبة. هذا يحد من الوصول إلى المستخدمين المصرح لهم ويقلل من مخاطر الوصول غير المصرح به إلى موارد التطبيق الخاص بك.