كيفية إنشاء تطبيق Django والاتصال به بقاعدة بيانات

مقدمة

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

في هذا البرنامج التعليمي، ستتعلم كيفية إعداد الأساس الأولي لموقع ويب للمدونة مع اتصالات بقاعدة بيانات MySQL. سيتضمن ذلك إنشاء الهيكل الأساسي لتطبيق الويب للمدونة باستخدام django-admin، إنشاء قاعدة البيانات MySQL، وتوصيل تطبيق الويب بقاعدة البيانات.

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

المتطلبات الأساسية

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:

بمجرد أن يتم تثبيت كل شيء وإعداده، يمكنك المضي قدمًا إلى الخطوة الأولى.

الخطوة 1 — إنشاء قاعدة البيانات

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

لإعداد هذا، قم بالاتصال بقاعدة بيانات MySQL كمستخدم root MySQL باستخدام الأمر التالي:

  1. sudo mysql

ستعرف أنك في خادم MySQL عندما يتغير البرومبت:

تفقد قواعد البيانات الحالية باستخدام الأمر التالي:

  1. SHOW DATABASES;

سيكون مخرجاتك مشابهة لما يلي، بشرط ألا تكون قد أنشأت أي قواعد بيانات بعد:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)

بشكل افتراضي، سيكون لديك 4 قواعد بيانات مُنشأة بالفعل: information_schema، MySQL، performance_schema و sys. لن تحتاج إلى لمس هذه القواعد، حيث تحتوي على معلومات مهمة بالنسبة لخادم MySQL نفسه.

بدلاً من ذلك، قم بإنشاء قاعدة البيانات الأولية التي ستحتوي على البيانات الخاصة بمدونتك.

لإنشاء قاعدة بيانات في MySQL، قم بتشغيل الأمر التالي، باستخدام اسم مناسب لقاعدة البيانات:

  1. CREATE DATABASE blog_data;

عند إنشاء قاعدة البيانات بنجاح، سيكون الإخراج كالتالي:

Output
Query OK, 1 row affected (0.00 sec)

تحقق من أن قاعدة البيانات الآن مدرجة كواحدة من قواعد البيانات المتاحة:

  1. SHOW DATABASES;

يجب أن تظهر قاعدة البيانات blog_data الآن ضمن قواعد البيانات المدرجة في الإخراج:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | blog_data | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

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

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

  1. CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

اسمح لقاعدة البيانات بمعرفة أن djangouser يجب أن يكون لديه وصول كامل إلى قاعدة البيانات التي قمت بإعدادها:

  1. GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';

الآن لديك قاعدة بيانات وحساب مستخدم، تم إنشاؤهما كل منهما بشكل خاص لـ Django. انقل الامتيازات بحيث تعلم النسخة الحالية من MySQL عن التغييرات الأخيرة التي قمت بها:

  1. FLUSH PRIVILEGES;

بعد الانتهاء من ذلك، يمكنك الخروج من خادم MySQL عن طريق كتابة EXIT; أو الضغط على CTRL + D.

الخطوة ٢ — إنشاء ملف خيارات MySQL

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

افتح ملف التكوين my.cnf باستخدام محرر النص المفضل لديك لتحديث بيانات اعتماد MySQL الخاصة بك. هنا سنستخدم nano:

  1. sudo nano /etc/mysql/my.cnf

أضف الأسطر التالية وقم بتضمين المعلومات ذات الصلة بك:

/etc/mysql/my.cnf
…

[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8

لاحظ أن utf8 مُعين كترميز افتراضي. هذه طريقة شائعة لترميز البيانات اليونيكود في MySQL. عندما تكون متأكدًا من صحة تفاصيلك، احفظ الملف وأغلقه. إذا استخدمت nano لتحرير الملف، يمكنك القيام بذلك عن طريق الضغط على CTRL + O لحفظ الملف ثم CTRL + X لإغلاق المحرر.

بمجرد تعديل الملف، أعد تشغيل MySQL ليتم تطبيق التغييرات:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart mysql

يرجى ملاحظة أن إعادة تشغيل MySQL يستغرق بضع ثوانٍ، لذا يرجى الانتظار بصبر.

الخطوة 3 — إنشاء هيكل المشروع الأولي لـ Django

في هذه الخطوة، ستضع الأساس لتطبيقك من خلال إنشاء هيكل المشروع باستخدام أمر django-admin.

انتقل إلى الدليل الذي ترغب في بناء تطبيق مدونتك فيه. داخل هذا الدليل، قم بإنشاء دليل محدد لبناء التطبيق. اسمِ الدليل بشيء ذي معنى للتطبيق الذي تقوم ببنائه. كمثال، سنسمي الدليل الخاص بنا my_blog_app:

  1. mkdir my_blog_app

ثم، انتقل إلى الدليل الجديد الذي تم إنشاؤه:

  1. cd my_blog_app

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

  1. python3 -m venv env

بمجرد إنشائها، يمكنك تنشيطها:

  1. . env/bin/activate

ثم، قم بتثبيت Django في هذه البيئة إذا لم تكن قد فعلت ذلك بالفعل:

  1. pip install django

أثناء التواجد في الدليل my_blog_app، قم بتوليد مشروع عن طريق تشغيل الأمر التالي:

  1. django-admin startproject blog

تحقق من أنه عمل من خلال الانتقال إلى الدليل blog/:

  1. cd blog

ثم قم بتشغيل ls للتحقق من أن الملفات والدلائل الضرورية قد تم إنشاؤها داخل مجلد المشروع:

  1. ls

ستقوم النتيجة بعرض الدليل blog وملف manage.py:

Output
blog manage.py

الآن بعد أن قمت بإنشاء دليل مشروع يحتوي على بداية المشروع الأولية لتطبيق مدونتك، يمكنك المتابعة إلى الخطوة التالية.

الخطوة ٤ — تثبيت موصل قاعدة بيانات MySQL

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

أولاً، قم بتثبيت رؤوس التطوير والمكتبات اللازمة لـ MySQL:

  1. sudo apt install libmysqlclient-dev default-libmysqlclient-dev

ثم، استخدم pip لتثبيت حزمة wheel. Wheel هو تنسيق تغليف يستخدم في Python لتثبيت الوحدات من فهرس حزم Python. تثبيت البرامج Python من حزم Wheel عموماً أسرع وأكثر كفاءة من بناء الحزم من مصدرها. من أجل تثبيت البرامج والعمل معها المعبأة كـ wheels، عليك أولاً التأكد من تثبيت حزمة wheel:

  1. pip install wheel

ثم انتقل إلى تثبيت mysqlclient:

  1. pip install mysqlclient

ستكون النتيجة النهائية مشابهة للتالي، مؤكدةً بأن الموصل تم تثبيته بنجاح:

Output
... Successfully installed mysqlclient-2.1.1

لقد قمت الآن بتثبيت موصل MySQL بنجاح باستخدام مكتبة موصل PyPi mysqlclient.

الخطوة 5 — تحرير الإعدادات

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

لتحرير الملف، افتح المسار إلى الملف باستخدام محرر النص الذي تفضله:

  1. nano ~/my_blog_app/blog/blog/settings.py

من أجل أن يكون لدى مدونتك التوقيت الصحيح المرتبط بمنطقتك، يمكنك تعديل ملف settings.py بحيث يستخدم التوقيت الزمني الحالي لديك. يمكنك استخدام هذه قائمة التوقيتات كمرجع. في مثالنا، سنستخدم التوقيت America/New_York.

ضمن الملف، انتقل إلى الحقل TIME_ZONE بالقرب من القسم السفلي للملف:

~/my_blog_app/blog/blog/settings.py
...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

قم بتعديل السطر TIME_ZONE، بحيث يتم تعيينه إلى التوقيت الزمني الحالي لديك. سنستخدم التوقيت لنيويورك في هذا المثال:

~/my_blog_app/blog/blog/settings.py
...

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

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

انتقل إلى نهاية ملف settings.py وأضف STATIC_ROOT:

~/my_blog_app/blog/blog/settings.py
…

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

الآن بعد أن قمت بإضافة المنطقة الزمنية والمسار للملفات الثابتة، قم بإضافة عنوان IP الخاص بك إلى قائمة الاستضافة المسموح بها. انتقل إلى السطر في ملف settings.py حيث يُقال ALLOWED_HOSTS، وسيكون نحو الأعلى من ملف settings.py. قم بإضافة عنوان IP لخادمك، محاطًا بعلامات اقتباس مفردة، بين الأقواس المربعة:

~/my_blog_app/blog/blog/settings.py
...
ALLOWED_HOSTS = ['your_server_IP_address']
...

بعد ذلك، قم بإضافة وحدة OS في Python التي توفر مختلف الوظائف للمجلدات. بدون هذه الوحدة، ستتلقى خطأ عند إعداد المستخدم الإداري لبدء استخدام واجهة Django. للقيام بذلك، تحتاج إلى استيراد وحدة os التي ستعمل على نظام التشغيل الخاص بك. قم بإضافة السطر import os فوق السطر from pathlib import Path:

~/my_blog_app/blog/blog/settings.py
...
import os
from pathlib import Path
...

حتى الآن، قمت بتحرير ملف settings.py حتى تم تكوين المنطقة الزمنية الصحيحة. كما قمت بإضافة مسار لملفاتك الثابتة، وجعلت عنوان ip الخاص بك مسموحًا لتطبيقك، وقمت باستيراد وحدة OS في Python للمساعدة في إعداد المستخدم الإداري في وقت لاحق.

آخر مقتطف لإضافته إلى ملفك هو بيانات اتصال قاعدة البيانات لربط تطبيق مدونتك Django ب MySQL. لهذا الغرض، ابحث عن القاموس DATABASES داخل الملف. ستبدو كما يلي افتراضيًا:

~/my_blog_app/blog/blog/settings.py
…

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.sqlite3',
    	'NAME': BASE_DIR / 'db.sqlite3',
	}
}
...

استبدل خيارات القاموس DATABASES ENGINE و NAME بالأسطر التالية:

~/my_blog_app/blog/blog/settings.py
...

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.mysql',
    	'OPTIONS': {
        	'read_default_file': '/etc/mysql/my.cnf',
    	},
	}
}
...

السطر 'ENGINE': 'django.db.backends.mysql' يخبر Django باستخدام مكون قاعدة بيانات MySQL المدمج به. الخيار read_default_file يشير إلى /etc/mysql/my.cnf، ملف الخيارات لـ MySQL الذي قمت بتحريره في وقت سابق. يخبر هذا Django حيث يمكنه العثور على تفاصيل الاتصال ذات الصلة للاتصال بقاعدة البيانات MySQL التي أنشأتها في الخطوة 1.

يرجى ملاحظة أن Django يقرأ إعدادات اتصال قاعدة البيانات بالترتيب التالي:

  • OPTIONS
  • NAME، USER، PASSWORD، HOST، PORT
  • ملفات الخيارات في MySQL

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

في هذه النقطة، يمكنك حفظ الملف وإغلاقه.

بعد ذلك، تحقق من التغييرات في الترحيل عن طريق تشغيل الأمر التالي:

  1. python manage.py makemigrations

ثم، قم بتشغيل migrate للتأكد من أن التغييرات تمر:

  1. python manage.py migrate

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

  1. python manage.py createsuperuser

سيُطلب منك تقديم اسم مستخدم، عنوان بريد إلكتروني، وكلمة مرور لمستخدمك.

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

الخطوة ٦ — ضبط إعدادات جدار الحماية

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

  1. sudo ufw allow 8000

تحقق من الحالة للتأكد من أن إعدادات الإذن هذه قد تم تحديثها بنجاح:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 8000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 8000 (v6) ALLOW Anywhere (v6)

تم ضبط إعدادات جدار الحماية الخاصة بك الآن بشكل صحيح للسماح باختبار الاتصال في الخطوة التالية.

الخطوة ٧ — اختبار اتصال MySQL بالتطبيق

الآن يمكنك التحقق من أن التكوينات في Django تكتشف خادم MySQL الخاص بك بشكل صحيح. يمكنك القيام بذلك عن طريق تشغيل الخادم. إذا فشل ذلك، فهذا يعني أن الاتصال لا يعمل بشكل صحيح. وإلا، فالاتصال صالح.

ابدأ أولاً بالانتقال إلى الدليل التالي:

  1. cd ~/my_blog_app/blog/

ثم قم بتشغيل الأمر التالي:

  1. python manage.py runserver your-server-ip:8000

سوف تتلقى إخراجًا مماثلاً للتالي:

Output
Performing system checks... System check identified no issues (0 silenced). July 19, 2022 - 13:26:08 Django version 4.0.6, using settings 'blog.settings' Starting development server at http://your-server-ip:8000/ Quit the server with CONTROL-C.

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

اتبع التعليمات من الناتج واتبع الرابط المقترح، http://عنوان-خادمك-بالآيبي:8000/، لعرض تطبيق الويب الخاص بك والتحقق من أنه يعمل بشكل صحيح.

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

عندما تنتهي من اختبار تطبيقك، اضغط CTRL + C لإيقاف أمر runserver. سيعيد هذا الأمر إلى بيئة البرمجة الخاصة بك.

عندما تكون جاهزًا لمغادرة بيئة Python الخاصة بك، يمكنك تشغيل الأمر deactivate:

  1. deactivate

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

الاستنتاج

في هذا البرنامج التعليمي، قمت بإنشاء الأساس الأولي لمدونتك في Django. لقد قمت بتثبيت MySQL وتكوينه وربطه بالجزء الخلفي من Django. كما أضفت بعض المعلومات الهامة إلى ملف settings.py الخاص بتطبيقك مثل TIME_ZONE، ALLOWED_HOSTS، import os، وبيانات اعتماد قاعدة البيانات لربط تطبيق Django ب MySQL. كما قمت بضبط إعدادات جدار الحماية لضمان سلاسة الاختبار.

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-a-django-app-and-connect-it-to-a-database