Django هو إطار عمل ويب معروف للتطوير السريع لمواقع وتطبيقات الويب الآمنة والقابلة للصيانة. تم بناؤه باستخدام Python، يسهل Django تطوير الويب، مما يتيح مزيدًا من الوقت والتركيز على كتابة التطبيقات دون إعادة اختراع العجلة في كل مرة. Django هو مشروع مجاني ومفتوح المصدر يتميز بتوثيق رسمي قوي، ودعم مجتمعي رائع، والكثير من الدعم المجاني والمدفوع.
في هذا الدليل، سنتعمق في إنشاء نماذج Django. في Django، الـ نموذج هو المصدر الرئيسي للمعلومات حول بياناتك. تصف النماذج حقول وسلوك البيانات المراد تخزينها. يستخدم Django النموذج لإنشاء جداول قاعدة البيانات باستخدام ORM (مخطط الكائنات المرجعية)، والتي يُشار إليها أيضًا بالنماذج.
المتطلبات الأساسية
نحن نعمل على نظام تشغيل يعتمد على Unix، ويفضل أن يكون خادم سحابي يعمل بنظام Ubuntu 20.04 كنظام قمنا بالاختبار عليه. إذا كنت ترغب في إعداد Django على بيئة مماثلة، فيرجى الرجوع إلى برنامجنا التعليمي، “كيفية تثبيت Django وإعداد بيئة تطوير على Ubuntu 20.04.”
الخطوة 1. بيئة تطوير Python
تم بناء Django على Python. لذلك، نحتاج إلى بيئة تطوير Python قوية تحتوي على جميع الأدوات اللازمة للعمل مع تطبيقات Python. لقد ناقشنا ذلك بالفعل في دليل مخصص. هنا، سيكون لدينا عرض توضيحي قصير.
أولاً، افتح الطرفية (terminal) وشغّل الأوامر التالية:
|
1 2 |
$ sudo apt update && sudo apt upgrade -y $ sudo apt install python3 python-is-python3 |
بعد ذلك، قم بتثبيت pip – مدير حزم Python:
|
1 |
$ sudo apt install python3-pip |
ثم، قم بتثبيت بعض حزم التطوير الإضافية:
|
1 |
$ sudo apt install build-essential libssl-dev libffi-dev python3-dev |
لإنشاء بيئة افتراضية، نحتاج أيضًا إلى وحدة Python venv :
|
1 |
$ sudo apt install python3-venv |
الخطوة 2. تثبيت خادم MySQL
يعد MySQL نظامًا شائعًا لإدارة قواعد البيانات العلاقاتية. إنه مفتوح المصدر ومستقر وغني بالميزات. سنستخدم MySQL كخادم قاعدة بيانات لتطبيق Django الخاص بنا. قم بتثبيت MySQL باستخدام APT:
|
1 |
$ sudo apt install mysql-server |
بعد ذلك، تحقق من التثبيت:
|
1 |
$ systemctl status mysql |
هذا مجرد إعداد أساسي لـ MySQL بالخيارات الافتراضية. تحقق من الدليل الأكثر تعمقًا حول تثبيت وتكوين MySQL.
الخطوة 3. إعداد تطبيق Django
نحن الآن جاهزون لإنشاء تطبيق Django الخاص بنا. إذا كنت مهتمًا بعرض توضيحي أكثر تعمقًا لـ Django، فيرجى الرجوع إلى برنامجنا التعليمي، “تثبيت إطار عمل ويب Django على Ubuntu 20.04.”
بعد ذلك، قم بإنشاء دليل مخصص للتطبيق. يجب أن يعكس اسم الدليل اسم المشروع:
|
1 |
$ mkdir -pv <project_dir> |
داخل دليل المشروع، قم بإنشاء بيئة افتراضية لـ Python باستخدام وحدة venv :
|
1 |
$ python3 -m venv <virtual_env_name> |
قم بتنشيط البيئة الافتراضية:
|
1 |
$ . sample_app_env/bin/activate |
قم بتثبيت Django باستخدام pip:
|
1 |
$ pip install django |
بعد ذلك، قم بإنشاء مشروع Django جديد باستخدام الأمر django-admin :
|
1 |
$ django-admin startproject sample_app |
الخطوة 4. تكوين تطبيق Django
يحتوي تطبيق Django على جميع التكوينات الافتراضية. لتحقيق هدفنا، نحتاج إلى إجراء بعض التعديلات.
ابدأ بتحرير ملف التكوين settings.py:
|
1 |
$ nano sample_app/sample_app/sample_app/settings.py |
ثم، قم بتغيير المنطقة الزمنية:
|
1 |
$ TIME_ZONE = '<time_zone>' |
أضف الأجهزة المسموح لها بالوصول إلى خادم تطبيق Django:
|
1 |
$ ALLOWED_HOSTS = ['<allowed_host_ip_or_domain_name >'] |
بعد ذلك، قم بتطبيق التغييرات:
|
1 |
$ python manage.py migrate |
أخيرًا، قم بإنشاء مستخدم متميز (superuser) لتطبيق ويب Django الخاص بنا:
|
1 |
$ python manage.py createsuperuser |
الخطوة 5. توصيل تطبيق Django بـ MySQL
للاتصال بـ MySQL، نحتاج إلى مكتبة موصل Python إضافية متوافقة مع Django. سنستخدم mysqlclient.
أولاً، تأكد من تثبيت الحزم اللازمة:
|
1 |
$ sudo apt install python3-dev libmysqlclient-dev default-libmysqlclient-dev |
بعد ذلك، قم بتثبيت mysqlclient:
|
1 |
$ pip install mysqlclient |
- إنشاء قاعدة بيانات مخصصة
بالنسبة لتطبيقنا، نحتاج إلى إنشاء قاعدة بيانات مخصصة ومستخدم قاعدة بيانات مخصص. قم بتشغيل واجهة تفاعل MySQL كـ root:
|
1 |
$ sudo mysql -u root |
أنشئ قاعدة بيانات مخصصة لتطبيق Django الخاص بنا:
|
1 |
$ CREATE DATABASE <dedicated_database>; |
ثم، قم بإنشاء مستخدم قاعدة بيانات مخصص لتطبيق Django:
|
1 |
$ CREATE USER '<username>'@'%' IDENTIFIED WITH mysql_native_password BY '<user_password>'; |
أخيرًا، امنح المستخدم المخصص الصلاحيات الكاملة على قاعدة البيانات المخصصة:
|
1 |
$ GRANT ALL ON <database>.* TO '<username'@'%'; |
- تغيير تكوين Django لاستخدام MySQL
الآن، نحتاج إلى تعديل بعض تكوينات Django حتى يتمكن من استخدام MySQL كخادم قاعدة بيانات. افتح settings.py في محرر نصوص:
|
1 |
$ nano settings.py |
قم بالتمرير لأسفل إلى قسم DATABASES والصق الكود التالي:
|
1 2 3 4 5 6 7 8 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'OPTIONS': { 'read_default_file': '/etc/mysql/my.cnf', }, } } |
بعد ذلك، قم بتحرير ملف تكوين MySQL بحيث يحتوي على بيانات اعتماد قاعدة البيانات اللازمة:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
أضف الكتلة التالية في نهاية الملف:
|
1 2 3 4 5 |
[client] database = <dedicated_database> user = <dedicated_user> password = <user_password> default-character-set = utf8 |
أعد تشغيل MySQL لتطبيق التغييرات:
|
1 2 |
$ sudo systemctl daemon-reload $ sudo systemctl restart mysql |
الخطوة 6. إنشاء نموذج Django
نحن الآن جاهزون لإنشاء نموذج جديد داخل مشروع Django الخاص بنا. قم بتنشيط البيئة الافتراضية:
|
1 2 3 |
$ cd sample_app/ $ . sample_app_env/bin/activate $ cd sample_app/ |
في هذا الموقع، اطلب من Django إنشاء تطبيق جديد:
|
1 |
$ python manage.py startapp <new_app> |
بعد الإنشاء، يجب أن تبدو شجرة الملفات كالتالي. هنا، سيحتوي الملف models.py على الأكواد الخاصة بنموذج Django المخصص لدينا:
تحقق من المحتوى الحالي للملف:
|
1 |
$ cat models.py |
للتوضيح، سنقوم بإنشاء نموذج لمنشورات المدونة باسم Post. وسوف يحتوي على الحقول التالية:
title: عنوان منشور المدونة.slug: يخزن وينشئ عناوين URL صالحة لصفحات الويب.content: نص منشور المدونة.created_on: تاريخ إنشاء المنشور.author: المستخدم الذي أنشأ المنشور.
افتح الملف models.py في محرر نصوص:
|
1 |
$ nano models.py |
دعنا نستورد بعض واجهات برمجة التطبيقات (APIs) اللازمة لنموذجنا. بشكل افتراضي، يستورد واجهة برمجة تطبيقات النماذج. سنحتاج أيضًا إلى واجهة برمجة تطبيقات slugify لإنشاء الروابط اللطيفة (slugs)، و User للمصادقة، و reverse لإنشاء عناوين URL أفضل وأكثر مرونة:
|
1 2 3 4 |
from django.db import models from django.template.defaultfilters import slugify from django.contrib.auth.models import User from django.urls import reverse |
بعد ذلك، أضف طريقة الفئة المسماة Post. وستحتوي على حقول قاعدة البيانات اللازمة مثل title, slug, content, created_on, و author:
|
1 2 3 4 5 6 |
class Post(models.Model): title = models.CharField(max_length=255) slug = models.SlugField(unique=True, max_length=255) content = models.TextField() created_on = models.DateTimeField(auto_now_add=True) author = models.TextField() |
نحن بحاجة إلى وظيفة لإنشاء عناوين URL وحفظ المنشور. هذا أمر مهم لأنه ينشئ روابط فريدة تطابق منشورات فريدة:
|
1 2 3 4 5 6 7 |
def get_absolute_url(self): return reverse('blog_post_detail', args=[self.slug]) def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.title) super(Post, self).save(*args, **kwargs) |
سيخبر القسم التالي النموذج بكيفية ترتيب المنشور وعرضه على صفحة الويب. سنقوم بترميز المنطق باستخدام فئة داخلية، Meta. ستحتوي على منطق نموذج إضافي لا يتعلق بتعريف حقول قاعدة البيانات:
|
1 2 3 4 5 |
class Meta: ordering = ['created_on'] def __unicode__(self): return self.title |
أخيرًا، سيكون لدينا ميزة نموذج Comment في هذا الملف. يتطلب ذلك إضافة فئة أخرى باسم Comment باستخدام models.Model كبنية لها. ستحتوي على حقول قاعدة البيانات التالية:
- name: اسم المعلق.
- email: البريد الإلكتروني للمعلق.
- text: محتوى التعليق نفسه.
- post: المنشور الذي تم كتابة التعليق عليه.
- created_on: وقت إنشاء التعليق.
سيبدو الكود كالتالي:
|
1 2 3 4 5 6 7 |
class Comment(models.Model): name = models.CharField(max_length=42) email = models.EmailField(max_length=75) website = models.URLField(max_length=200, null=True, blank=True) content = models.TextField() post = models.ForeignKey(Post, on_delete=models.CASCADE) created_on = models.DateTimeField(auto_now_add=True) |
عند هذه النقطة، سيكون ملف models.py الخاص بنا بهذا الشكل:
أخيرًا، احفظ الملف وأغلق المحرر.
الخطوة 7. تحديث إعدادات Django
تم إنشاء النموذج. ومع ذلك، نحتاج إلى تعديل بعض ملفات التكوين لتفعيل النموذج. داخل settings.py، نحتاج إلى إضافة نموذجنا تحت INSTALLED_APPS.
افتح settings.py في محرر نصوص:
|
1 |
$ nano settings.py |
قم بتسجيل الوحدة الجديدة تحت القسم INSTALLED_APPS:
احفظ الملف وأغلق المحرر.
الخطوة 8. ترحيل التغييرات
الآن بعد أن أضفنا جميع النماذج المطلوبة، الخطوة التالية هي تطبيق هذه التغييرات. سيقوم Django بتطبيق هذه المخططات على قاعدة بيانات MySQL الخاصة بنا.
سيقوم الأمر التالي بإنشاء جميع ملفات الترحيل اللازمة. سيعرض المخرج مواقع كل تلك الملفات داخل دليل المشروع:
|
1 |
$ python manage.py makemigrations |
سيقوم الأمر التالي بسرد جميع عمليات الترحيل الحالية:
|
1 |
$ python manage.py showmigrations |
لاحظ أن جميع عمليات الترحيل مميزة بعلامة باستثناء 0001_initial الذي تم إنشاؤه كجزء من النموذجين Post و Comment.
سيوضح الأمر التالي استعلام SQL الذي سيقوم Django بتنفيذه لإجراء عمليات الترحيل:
|
1 |
$ python manage.py sqlmigrate random_app 0001_initial |
كل ما نحتاجه الآن هو تطبيق عمليات الترحيل. ستقوم عمليات الترحيل هذه بكتابة التغييرات في قاعدة البيانات:
|
1 |
$ python manage.py migrate |
الخطوة 9. التحقق من التغييرات
للتحقق من التغييرات، دعنا نلقي نظرة على قاعدة بيانات MySQL الخاصة بنا. ابدأ تشغيل واجهة تفاعل MySQL كمستخدم Django:
|
1 |
$ mysql sample_app_data -u sample_app_user |
بعد ذلك، قم بتغيير قاعدة البيانات النشطة الحالية إلى قاعدة بيانات تطبيق Django:
|
1 |
$ USE <django_dedicated_database>; |
اعرض قائمة بجميع الجداول من قاعدة البيانات:
|
1 |
$ SHOW TABLES; |
أخيرًا، لرؤية محتوى أي من الجداول، استخدم استعلام DESCRIBE:
|
1 2 |
$ DESCRIBE random_app_comment; $ DESCRIBE random_app_post; |
قيود Django مع MySQL
عند استخدام MySQL كخادم قاعدة بيانات لتطبيق Django الخاص بك، هناك بعض الأشياء التي يجب وضعها في الاعتبار:
- لا يوجد دعم كبير للمعاملات المتعلقة بعمليات تعديل المخطط. وهذا يعني أنه في حال فشل عملية الترحيل، سيتطلب الأمر التراجع يدويًا عن جميع التغييرات قبل محاولة إجراء ترحيل آخر. لا توجد طريقة للرجوع إلى نقطة سابقة لم يحدث فيها الترحيل الفاشل.
- بالنسبة لمعظم عمليات تعديل المخطط، تقوم MySQL بإعادة كتابة الجداول بالكامل. وفي بعض الحالات، قد يستغرق ذلك وقتًا طويلاً للغاية. في أسوأ الأحوال، ستكون التعقيد الزمني متناسبًا مع عدد الصفوف المراد إضافتها أو الأعمدة المراد إزالتها. وفقًا لتوثيق Django الرسمي، قد يستغرق الأمر دقيقة واحدة لكل مليون صف.
- تفرض MySQL حدًا أقصى لعدد الأحرف لطول أسماء الأعمدة والجداول والفهارس. هناك أيضًا حد للحجم الإجمالي لجميع الأعمدة وتغطية الفهارس. يمكن لـ Django تجاوز هذا الحد. يمكن لبعض الخلفيات الأخرى غير MySQL التعامل مع الحد الأعلى لـ Django.
لهذا السبب يُنصح بشدة بموازنة خياراتك واختيار الخيار المناسب.
أفكار نهائية
يوضح هذا الدليل بنجاح كيفية إضافة وحدات إلى تطبيق Django الحالي. لقد استخدمنا MySQL كخلفية للتطبيق. كما يعرض بعض مفاهيم Django الأساسية مثل النماذج، وكيفية عمل الترحيل، وكيف يترجم Django النماذج إلى جداول قاعدة بيانات MySQL.
حوسبة سعيدة!





















التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.