يعد جانغو إطار عمل ويب قوي يوفر للمطورين مجموعة واسعة من الأدوات لإنشاء تطبيقات الويب بسرعة وكفاءة. إحدى الميزات الأكثر فائدة في جانغو هي القدرة على إنشاء إشارات، والتي تسمح للمطورين بالاستجابة للأحداث التي تحدث داخل تطبيقاتهم.
في هذا الدرس، سنتكلم عن ما هي الإشارات وكيفية إنشائها وبعض الأمثلة عن كيفية استخدامها في تطبيقات جانغو.
ما هي الإشارات؟
الإشارات في جانغو هي طريقة لربط حدث ما بإجراء ما. يمكن استخدام الإشارات لتشغيل التعليمات البرمجية عند حدوث حدث معين ، مثل إنشاء نموذج جديد أو تعديله أو حذفه.
و هي تسمح لجزء من التطبيق بإرسال رسالة أو إشارة إلى جزء آخر من التطبيق عند وقوع حدث معين.
هناك نوعان رئيسيان من الإشارات في جانغو:
- الإشارات في النماذج: يمكن استخدام الإشارات في النماذج لتشغيل التعليمات البرمجية عند حدوث حدث معين في نموذج ، مثل إنشاء نموذج جديد أو تعديله أو حذفه.
- الإشارات في العروض: يمكن استخدام الإشارات في العروض لتشغيل التعليمات البرمجية عند حدوث حدث معين في عرض ، مثل النقر على زر أو إرسال نموذج
إنشاء الإشارات في جانغو
لإنشاء إشارة في جانغو، نحتاج إلى تحديد المرسل والمستقبل، المرسل هو جزء من التطبيق الذي يرسل الإشارة، في حين أن المستقبل هو جزء من التطبيق الذي يستقبل الإشارة ويستجيب لها.
تعريف الإشارة
لتعريف الإشارة في جانغو، نحتاج أولاً إلى استيراد فئة Signal
من وحدة django.dispatch
. بعد ذلك يمكننا إنشاء كائن الإشارة.
from django.dispatch import Signal
my_signal = Signal()
في هذا المثال، قمنا بإنشاء إشارة تسمى my_signal
.
الإتصال بالمستقبل
بمجرد أن نحدد إشارتنا، نحتاج إلى توصيلها إلى المستقبل. و هو دالة سيتم استدعاؤها عند إرسال الإشارة.
لتوصيل الإشارة بالمستقبل سنستخدم المزخرفات المقدمة من جانغو. و يحتوي مزخرف المستقبل على وسيطتين: الإشارة التي نريد توصيلها إلى المستقبل ومرسل الإشارة.
from django.dispatch import receiver
@receiver(my_signal, sender=MyModel)
def my_receiver(sender, **kwargs):
# القيام بشيء ما هنا
في هذا المثال، قمنا بتعريف دالة المستقبل تسمى my_receiver
. و لقد استخدمنا مزخرف @receiver
لتوصيل هذه الدالة بإشارة my_signal
، وحددنا أن مرسل الإشارة يجب أن يكون من فئة MyModel
.
إرسال الإشارة
الآن بعد أن حددنا إشارتنا وقمنا بالإتصال بالمستقبل، يمكننا إرسال الإشارة. لإرسال إشارة، نقوم ببساطة باستدعاء كائن الإشارة وتمرير أي بيانات نريد إرسالها مع الإشارة.
my_signal.send(sender=MyModel, data="Hello, World!")
في هذا المثال، نرسل إشارة my_signal
ونحدد أن مرسل الإشارة هو فئة MyModel
. نقوم أيضًا بتمرير بعض البيانات مع الإشارة، والتي ستكون متاحة لدالة الاستقبال عند استدعائها.
أمثلة على استخدام الإشارات في جانغو
الآن بعد أن عرفنا كيفية إنشاء واستخدام الإشارات في جانغو، دعونا نلقي نظرة على بعض الأمثلة حول كيفية استخدامها في الممارسة العملية.
إجراءات تسجيل دخول المستخدم
إحدى حالات الاستخدام الشائعة للإشارات هي إجراءات تسجيل دخول المستخدم. على سبيل المثال، قد نرغب في تسجيل الدخول عندما يقوم المستخدم بتسجيل الدخول أو تسجيل الخروج من تطبيقنا.
للقيام بذلك، يمكننا إنشاء إشارة يتم إرسالها عندما يقوم المستخدم بتسجيل الدخول أو تسجيل الخروج. يمكننا بعد ذلك الإتصال بدالة الاستقبال التي ستقوم بتسجيل الحدث بنظام تسجيل التطبيق الخاص بنا.
from django.contrib.auth.signals import user_logged_in, user_logged_out
from django.dispatch import receiver
@receiver(user_logged_in)
def log_user_logged_in(sender, request
تسجيل الأحداث
يمكن استخدام الإشارات لتسجيل الأحداث في قاعدة بيانات أو نظام السجل. على سبيل المثال، يمكن استخدام الإشارة post_save
لإعلام التطبيقات الأخرى بحفظ نموذج معين.
from django.db.models.signals import post_save
def log_model_save(sender, instance, **kwargs):
"""
سجل حفظ نموذج.
Args:
sender: النموذج الذي تم حفظه.
instance: مثيل للنموذج الذي تم حفظه.
kwargs: أي معلمات أخرى تم تمريرها إلى إشعار الإشارة.
"""
logger.info("تم حفظ نموذج: %s", instance)
post_save.connect(log_model_save, sender=MyModel)
تنفيذ الإجراءات
يمكن استخدام الإشارات لتشغيل إجراءات معينة عند حدوث حدث معين. على سبيل المثال، يمكن استخدام الإشارة pre_save
لإنشاء نسخة احتياطية من نموذج قبل حفظه.
from django.db.models.signals import pre_save
def create_backup(sender, instance, **kwargs):
"""
إنشاء نسخة احتياطية من نموذج.
Args:
sender: النموذج الذي تم حفظه.
instance: مثيل للنموذج الذي تم حفظه.
kwargs: أي معلمات أخرى تم تمريرها إلى إشعار الإشارة.
"""
# إنشاء نسخة احتياطية من النموذج.
backup = instance.save(backup=True)
pre_save.connect(create_backup, sender=MyModel)
إشارات جانغو المدمجة
فيما يلي بعض الأمثلة على الإشارات المضمنة التي يوفرها Django:
post_save
: يتم إرسال هذه الإشارة بعد حفظ نموذج. يمكن استخدامها لأداء مهام مثل إنشاء نسخة احتياطية من النموذج أو إرسال إشعار إلى المستخدم.pre_save
: يتم إرسال هذه الإشارة قبل حفظ نموذج. يمكن استخدامها لأداء مهام مثل التحقق من صحة البيانات أو تحويل البيانات.post_delete
: يتم إرسال هذه الإشارة بعد حذف نموذج. يمكن استخدامها لأداء مهام مثل إزالة الملفات المرتبطة بالنموذج أو إرسال إشعار إلى المستخدم.pre_delete
: يتم إرسال هذه الإشارة قبل حذف نموذج. يمكن استخدامها لمنع الحذف أو إجراء إجراءات إضافية قبل الحذف.m2m_changed
: يتم إرسال هذه الإشارة عند تغيير علاقة أطراف متعددة. يمكن استخدامها لتحديث واجهة المستخدم أو إرسال إشعار إلى المستخدم.form_valid
: يتم إرسال هذه الإشارة عند صحة نموذج. يمكن استخدامها لمعالجة البيانات أو إرسال إشعار إلى المستخدم.form_invalid
: يتم إرسال هذه الإشارة عند عدم صحة نموذج. يمكن استخدامها لعرض رسالة خطأ أو إرسال إشعار إلى المستخدم.
فيما يلي مثال على استخدام الإشارة post_save
لإنشاء نسخة احتياطية من نموذج:
from django.db.models.signals import post_save
def create_backup(sender, instance, **kwargs):
"""
إنشاء نسخة احتياطية من نموذج.
Args:
sender: النموذج الذي تم حفظه.
instance: مثيل للنموذج الذي تم حفظه.
kwargs: أي معلمات أخرى تم تمريرها إلى إشعار الإشارة.
"""
# إنشاء نسخة احتياطية من النموذج.
backup = instance.save(backup=True)
post_save.connect(create_backup, sender=MyModel)
اكتشاف المزيد من بايثون العربي
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.