اذهب إلى المحتوى

إنشاء تطبيق جانغو وتوصيله بقاعدة بيانات


هدى جبور

جانغو Django هو إطار عمل Framework  مجاني ومفتوح المصدر، كُتِب بلغة بايثون، يوفر لنا ميزات قابلية التوسع وإعادة الاستخدام والتطوير السريع.

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

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

هذا المقال جزء من سلسلة مقالات قصيرة حول كيفية إنشاء تطبيق ويب ليكون بمثابة مدونة وإليك فهرس كامل السلسلة:

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

ستحتاج في هذا المقال إلى:

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

الخطوة الأولى - إنشاء قاعدة البيانات

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

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

$ sudo mysql

بعد ذلك سيتغير رمز سطر الأوامر ليصبح هكذا:

mysql>

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

mysql> SHOW DATABASES;

ستحصل على خرج يشبه الخرج التالي (بافتراض أنك لم تنشئ أي قاعدة بيانات حتى الآن):

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

هناك 4 قواعد بيانات يتم إنشاؤها افتراضيًّا، موضحة في الخرج السابق، ولن تحتاج إلى التعامل معها، فهي تحتوي على معلومات خاصة بخادم MySQL.

الآن، لإنشاء قاعدة بيانات MySQL تحتفظ ببيانات مدونتك، نفذ الأمر التالي:

mysql> CREATE DATABASE blog_data;

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

Query OK, 1 row affected (0.00 sec)

انتبه فهناك احتمال أن تتلقى الخطأ التالي:

ERROR 1007 (HY000): Can't create database blog_data; database exists

يشير ذلك إلى أن قاعدة البيانات التي أسميناها blog_data أصبحت موجودة.

إذا تلقيت خطأ MySQL التالي، فهذا يعني أن هناك خطأ قواعدي في كتابة أمر MySQL. لذا تأكد من أنك كتبت الأمر كما هو تمامًا:

ERROR 1064 (42000): You have an error in your SQL syntax;

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

$ SHOW DATABASES;

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

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

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

أولًا، أنشئ المستخدم وحدد كلمة المرور عن طريق الأمر التالي (حدد كلمة مرور قوية -استبدل "password" بكلمة المرور التي تريدها-):

mysql>  CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

الآن، يجب أن تعطي المستخدم djangouser صلاحيات الوصول الكامل إلى قاعدة البيانات التي هيأتها:

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

لديك الآن قاعدة بيانات وحساب مستخدم، كل منهما مصمم خصيصًا لجانغو. نفذ الآن الأمر التالي حتى يعرف MySQL التغييرات الأخيرة التي أجريتها:

mysql>  FLUSH PRIVILEGES;

الأمر السابق ضروري لإخبار الخادم أن يُعيد تحميل جداول الصلاحيات grant tables.

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

الخطوة الثانية - إنشاء ملف ضبط MySQL

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

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

$ 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 كترميز افتراضي، لأنها الطريقة الشائعة لترميز بيانات Unicode في MySQL. عندما تتأكد من صحة التفاصيل الخاصة بك، احفظ الملف واغلقه. في حال استخدمت المحرر نانو nano لتحرير الملف، فيمكنك القيام بذلك عن طريق الضغط على CTRL + X ثم Y لتأكيد التغييرات.

بعد الانتهاء من تعديل الملف، ستحتاج إلى إعادة تشغيل MySQL لتصبح التغييرات سارية المفعول:

$ sudo systemctl daemon-reload
$ sudo systemctl restart mysql

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

الخطوة الثالثة - إنشاء البنية الأولية لمشروع جانغو

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

انتقل أولًا إلى المجلد الذي ترغب أن تضع مجلد مشروعك فيه، ثم أنشئ مجلد مشروعك واعطه اسمًا مناسبًا، مثل my_blog_app:

$ mkdir my_blog_app

انتقل الآن إلى المجلد الذي أنشأته:

$ cd my_blog_app

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

$ python3 -m venv env

بعد إنشاء البيئة، يجب أن تنشطها:

$ . env/bin/activate

ثبت الآن جانغو داخل البيئة:

(env) sammy@ubuntu:$ pip install django

نفذ الأمر التالي داخل مجلد my_blog_app، لإنشاء مشروع بداخله:

(env) sammy@ubuntu:$ django-admin startproject blog

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

(env) sammy@ubuntu:$ cd blog

ثم نفذ الأمر ls للتأكد من إنشاء الملفات والمجلدات الضرورية داخل مجلد المشروع:

(env) sammy@ubuntu:$ ls

عند تنفيذ هذا الأمر، ستلاحظ في الخرج ظهور مجلد blog وملف الإدارة manage.py:

blog manage.py

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

الخطوة الرابعة - تثبيت موصل قاعدة البيانات MySQL Database Connector

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

ثبت أولًا بعض المكتبات الضرورية في MySQL:

(env) sammy@ubuntu:$ sudo apt install libmysqlclient-dev default-libmysqlclient-dev

ثبت بعد ذلك حزمة wheel باستخدام مدير الحزم pip. وهي حزمة تستخدم في بايثون لتثبيت الوحدات modules من فهرس حزم بايثون Python Package Index. إن تثبيت برامج بايثون من خلال حزمة wheel يكون أسرع وأكثر كفاءة في استخدام الموارد من تثبيتها عن طريق بناء الحزم من الشيفرة المصدر. لتثبيت حزمة wheel، نفذ الأمر التالي:

(env) sammy@ubuntu:$ pip install wheel

بعد ذلك ثبت mysqlclient:

(env) sammy@ubuntu:$ pip install mysqlclient

بعد ذلك يجب أن تحصل على خرج مشابه للتالي:

...
Successfully installed mysqlclient-2.1.0

بذلك تكون نجحت في تثبيت mysqlclient.

الخطوة الخامسة - تعديل الإعدادات

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

افتح الملف لتعديله من خلال محرر النصوص الذي تريده (هنا كالعادة المحرر nano):

(env) sammy@ubuntu:$ nano ~/my_blog_app/blog/blog/settings.py

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

لإنجاز ذلك، انتقل إلى الحقل TIME_ZONE، والمتواجد ضمن ملف الإعدادات في القسم السفلي ‎~/my_blog_app/blog/blog/settings.py:

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
...

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

...
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/New_York'

USE_I18N = True
...

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

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

...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

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

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

...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['your_server_IP_address']

# Application definition
...

أضف بعد ذلك وحدة نظام التشغيل OS، التي توفّر وظائف متنوعة للمجلدات. هذه الوحدة ضرورية، فبدونها ستتلقى خطأ عند إنشاء مستخدم مُدير administrative user لكي تتمكن من استخدام واجهة جانغو Django interface من خلاله. لإنجاز ذلك عليك باستيراد وحدة OS التي ستعمل على نظام التشغيل الخاص بك. أضف سطر الاستيراد import os في أعلى ملف الإعدادات:

...
import os
from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
...

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

...
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

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

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

...
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

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

يُقصد بالسطر "ENGINE": "django.db.backends.mysql" إخبار جانغو أن يَستخدم الواجهة الخلفية لقاعدة بيانات MySQL المدمجة بينما يشير خيارread_default_file إلى ‎/etc/mysql/my.cnf، وهو ملف خيارات MySQL الذي عدلناه سابقًا، وهذا يخبر جانغو أين يمكن العثور على تفاصيل الاتصال اللازمة للاتصال بقاعدة بيانات MySQL التي أنشأتها في الخطوة الأولى.

لاحظ أن جانغو يقرأ إعدادات الاتصال بقاعدة البيانات بالترتيب التالي:

  • الخيارات OPTIONS
  • الاسم، المستخدم، كلمة المرور، المضيف HOST، المنفذ PORT
  • ملفات الضبط MySQL

بناءً على الترتيب السابق، وبما أنك وضعت ملف خيارات MySQL ضمن الحقل OPTIONS، فسيكون لها الأولوية في التنفيذ على الإعدادات الموجودة في الحقل NAME، وذلك لأن الأولوية تكون للإعدادات الموجودة في الحقل OPTIONS، وبعد ذلك NAME، بينما لو وضعت ملف الضبط في مكان آخر، ستكون الأولوية للإعدادات التي تم تحديدها في الحقل NAME.

يمكنك الآن حفظ وإغلاق الملف. بعد ذلك، تحقق من تغييرات التهجير migration عن طريق تشغيل ما يلي:

(env) sammy@ubuntu:$ python manage.py makemigrations

بعد ذلك نفّذ أمر التهجيرmigrate لضمان تنفيذ التغييرات:

(env) sammy@ubuntu:$ python manage.py migrate

الآن بعد أن تم تهجير التغييرات، يمكنك إنشاء مستخدم مُدير لكي تتمكن من استخدام واجهة مُدير جانغو. أنجز ذلك من خلال الأمر Createsuperuser:

(env) sammy@ubuntu:$ python manage.py createsuperuser

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

بعد إكمال هذه المعلومات، يمكنك الانتقال إلى الخطوة السادسة.

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

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

(env) sammy@ubuntu:$ sudo ufw allow 8000

للتأكد من أنه أعطيت صلاحيات الوصول إلى المنفذ بنجاح، نفّذ الأمر status:

(env) sammy@ubuntu:$ sudo ufw status

سيكون الخرج:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
8000                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
8000 (v6)                  ALLOW       Anywhere (v6)

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

الخطوة السابعة - اختبار اتصال قاعدة بيانات MySQL بتطبيق جانغو

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

(env) sammy@ubuntu:$ cd ~/my_blog_app/blog/

نفّذ بعد ذلك الأمر التالي:

(env) sammy@ubuntu:$ python manage.py runserver your-server-ip:8000

سيكون الخرج مُشابهًا للتالي:

Performing system checks...

System check identified no issues (0 silenced).
October 25, 2021 - 19:50:58
Django version 3.2.9, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.

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

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

django-3-testsite01.png

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

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

للخروج بعد ذلك من بيئة بايثون الخاصة بك، يجب أن تنفّذ أمر إلغاء تنشيط البيئة:

(env) sammy@ubuntu:$ deactivate

ستُنقل بعد ذلك إلى الموقع الافتراضي في سطر الأوامر.

خاتمة

تعلمت في هذا المقال بناء الهيكل الأولي لمدونتك عن طريق جانغو؛ أكملت عملية تثبيت وتهيئة وتوصيل قاعدة بيانات MySQL مع تطبيق جانغو، وأضفت بعض المعلومات المهمة إلى ملف الإعدادات settings.py الخاص بتطبيقك، مثل توقيت منطقتك TIME_ZONE وتعديل قائمة ALLOWED_HOSTS واستيراد وحدة نظام التشغيل OS وبيانات اعتماد قاعدة البيانات لربط تطبيق جانغو بقاعدة بيانات MySQL، كما ضبطت إعدادات جدار الحماية لضمان إجراء الاختبار بنجاح. أصبح بإمكانك الآن البدء في تطوير النماذج وتطبيق عمليات التهجير في تطبيق جانغو الخاص بك وهذا ما سنتحدث عنه في المقال التالي.

ترجمة -وبتصرف- للمقال How To Create a Django App and Connect it to a Database لصاحبه Jeremy Morris.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...