كيفية ضبط ملف الاعدادات settings.py في Django
Dec. 31, 2022 * تيتو 4 تك
تعرفنا في المقالات السابقة عن الطريقة الصحيحة لتثبيت إطار العمل Django علي نظام التشغيل ويندوز وعن طريقة إنشاء أول مشروع وأول تطبيق باستخدام Django. في هذا المقال سوف نتحدث عن الطريقة المثالية لضبط ملف الإعدادات settings. py الخاص بمشروع Django.
لقد تعلمنا أنه عند إعطاء الأمر التالي: Django- admin startproject test_project سيؤدي إلى إنشاء بنية مجلد أساسية لمشروع Django الخاص بك، والتي تحتوي على خمسة ملفات أساسية بشكل افتراضي. وهذه الملفات الخمسة كما يلي:
(venv) PS C:\Users\Tareq-Aljundy\desktop\tito4tech\django_project\test_project> ls test_project Directory: C:\Users\Tareq-Aljundy\desktop\tito4tech\django_project\test_project\test_project Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 12/31/2022 2:03 AM 417 asgi.py -a---- 12/31/2022 2:03 AM 3362 settings.py -a---- 12/31/2022 2:03 AM 775 urls.py -a---- 12/31/2022 2:03 AM 417 wsgi.py -a---- 12/31/2022 2:03 AM 0 __init__.py
يعتبر settings. py هو أهم ملف أساسي في مشاريع Django. حيث إنه يحتوي على جميع قيم التكوين التي يحتاجها تطبيق الويب الخاص بك للعمل؛ إعدادات قاعدة البيانات، وتكوين التسجيل، ومكان العثور على الملفات الثابتة، ومفاتيح API إذا كنت تعمل مع واجهات برمجة التطبيقات الخارجية، ومجموعة من الأشياء الأخرى. ملف الإعدادات هو مجرد وحدة Python بمتغيرات على مستوى الوحدة النمطية. سوف نقوم بشرح كل جزئية فيه كل علي حدة.
BASE_DIR:
يشير BASE_DIR إلى التسلسل الهرمي الأعلى للمشروع، أي موقع test_project، مهما كانت المسارات التي نحددها في المشروع كلها مرتبطة ب BASE_DIR. لاستخدام BASE_DIR، سيتعين علينا استخدام وحدة نظام التشغيل المقدمة من Python. طبعا لن نقوم بأي إجراء في هذه الجزئية وسوف تترك كما هي.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY:
يتم استخدام Django secret key لتوفير توقيع مشفر. يستخدم هذا المفتاح في الغالب لتوقيع ملفات تعريف الارتباط للجلسات. إذا كان لدى أي شخص هذا المفتاح ، فسيكون قادرًا على تعديل ملفات تعريف الارتباط التي يرسلها التطبيق. ولذلك يجب الحفاظ علي سرية هذا المفتاح وعدم تعديله مطلقا.
SECRET_KEY = '1234567890!@#$%^&*)(ًEDFHVKSPlkjjjd'
DEBUG:
من الواضح جِدًّا حدوث خطأ في عملية التطوير. لا توجد متعة في كتابة برنامج حيث لا نواجه أي خطأ. ولكن في بعض الأحيان تكون معالجة الأخطاء مرهقة للغاية. يوفر Django مصحح أخطاء داخلي يجعل حياة المطور سهلة للغاية. يمكننا استخدامه من خلال القيام بما يلي:
DEBUG = True // هذه هي القيمة الافتراضية ويفضل ان تترك كما هي في مرحلة التطوير فقط ولكن عند رفع المشروع الي الانترنت سوف تكون هكذا DEBUG = False
ALLOWED_HOSTS:
ALLOWED_HOSTS هي قائمة تحتوي على عناوين لجميع أسماء المجالات (الدومين) التي يمكنها تشغيل مشروع Django الخاص بك.
ALLOWED_HOSTS=[ ] // عندما نكون في مرحلة التطوير سوف تكون فارغة لأن القيمة الافتراضية هي 127.0.0.1 أو localhost. اما عند رفع المشروع علي الانترنت لا يمكن أن تكون قائمة فارغة. علينا إعطاء أسماء المضيفين في القائمة. ALLOWED_HOSTS=["33.44.55.66", "tito4tech.com"] طبعا الرقم المكون من اربع خانات هو رقم الاي بي الخاص بالاستضافة والجزء الاخر هو اسم الدومين الخاص بالمشروع //
INSTALLED_APPS:
في هذا القسم ، سوف نقوم بكتابة جميع التطبيقات التي سيتم استخدامها في مشروع Django. بمعني اي تطبيق يتم انشاءه باستخدام الامر التالي: Django-admin startapp new_app، يجب إدخاله في INSTALLED_APPS:
INSTALLED_APPS = [ بعض التطبيقات المحملة مسبقًا بواسطة Django // ,'new_app' // لا تنس أن تضع علامة الاقتباس '' وكذلك الفاصلة , بعد كل تطبيق ]
MIDDLEWARE:
Middleware هي مكون إضافي خفيف الوزن يعالج أثناء تنفيذ الطلب والاستجابة. تُستخدم Middleware لأداء وظيفة معينة في التطبيق. يمكن أن تكون الوظائف عبارة عن أمان ، أو جلسة ، وحماية csrf ، ومصادقة ، إلخ.يوفر Django العديد من Middleware المضمنة ويسمح لنا أيضًا بكتابة Middleware الخاصة بنا. وفي ملف settings.py الخاص بمشروع Django يحتوي على Middleware متنوعة تُستخدم لتوفير وظائف للتطبيق. على سبيل المثال ، يتم استخدام Security Middleware للحفاظ على أمان التطبيق.
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:
يوضح هذا القسم تكوين مسار ملف URLConf لتحديد كيفية الوصول إلى التطبيقات المثبتة من الويب. ملف URLConf هو برنامج نصي بلغة Python يسمح لك بتحديد طرق عرض معينة يتم الوصول إليها بناءً على عنوان URL الذي تم إرساله بواسطة مستعرض الويب. عندما يتلقى خادم Django طلب عنوان URL ، يقوم بتحليل الطلب بناءً على الأنماط الموجودة في ملف URLConf.
ROOT_URLCONF = 'test_project.urls'
TEMPLATES:
يتم إنشاء مجلد Templates والاحتفاظ به في دليل المشروع حيث يحتوي مجلد القوالب هذا على المسار الرئيسي لجميع القوالب التي ستنشئها في تطبيقات Django المختلفة.
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR , 'templates' ) ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
WSGI_APPLICATION:
المفهوم الأساسي لاستخدام WSGI هو التطبيق القابل للاستدعاء الذي يستخدمه خادم التطبيق للتواصل مع التعليمات البرمجية الخاصة بك. يتم توفيره بشكل شائع ككائن باسم تطبيق في وحدة Python التي يمكن الوصول إليها من الخادم. يرجي عدم التلاعب به أو تغييره ويترك كما هو.
WSGI_APPLICATION = 'test_project.wsgi.application'
AUTH_PASSWORD_VALIDATORS:
يتضمن هذا القسم بعض أدوات التحقق الأساسية لإدارة كلمات المرور التي يمكن أن تكون مفيدة ، مثل فرض حد أدنى لطول كلمات المرور. حتى أن هناك كلمة مرور واحدة تمنع ظهور أي كلمة مرور في قائمة تضم أكثر من 1000 كلمة مرور شائعة.
AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ]
Internationalization:
يتضمن هذا القسم بعض أدوات تكييف تطبيق Django مع بيئات لغوية وثقافية مختلفة.
LANGUAGE_CODE = 'en-us' // يمكن اضافة المزيد من اللغات الاخرى هنا ,(ar-eg', _('Egypt')')
DATABASES:
يدعم Django رسميًا قواعد البيانات التالية:
- MariaDB
- MySQL
- Oracle
- SQLite -----> الافتراضية مع Django
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
وفيما يلي مثال على استخدام PostgreSQL:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': اسم قاعدة البيانات, 'USER': اسم المستخدم, 'PASSWORD': كلمة المرور لقاعدة البيانات, 'HOST': 'localhost' // في أثناء التطوير. } }
يرجي الانتباه الي انه قبل استخدام PostgreSQL ، يتعين عليك تثبيت psycopg2 باستخدام الامر التالي: pip install psycopg2
URL Variables:
متغيرات URL ذات صلة بـ BASE_DIR. تُستخدم هذه المتغيرات لتخزين الملفات إما وسائط (media) أو ثابتة (static).
MEDIA_URL
MEDIA_URL هو مسار نسبي لـ BASE_DIR. يستخدم هذا المتغير لتخزين ملفات الوسائط.
MEDIA_URL= '/media/'
STATIC_URL
STATIC_URL هو مسار نسبي لـ BASE_DIR. يستخدم هذا المتغير لتخزين الملفات الثابتة.
STATIC_URL = '/static/'
ROOT Variables:
متغيرات الجذر او ROOT variables هي مسارات مطلقة. تُستخدم هذه المتغيرات لاسترداد الملفات سواء كانت وسائط (media) أو ثابتة (static).
MEDIA_ROOT
MEDIA_ROOT هو المسار المطلق. يستخدم هذا المتغير لاسترداد ملفات الوسائط.
MEDIA_ROOT= os.path.join(BASE_DIR, 'media')
STATIC_ROOT
STATIC_ROOT هو المسار المطلق. يستخدم هذا المتغير لاسترداد الملفات الثابتة.
STATIC_ROOT= os.path.join(BASE_DIR, 'static')
ويرجي الانتباه الي ملحوظة مهمة جدا وهي ان جميع أسماء المتغيرات في إعدادات Django مكتوبة بالأحرف الكبيرة (CAPITAL).