Ninja Learn | نینجا لرن
1.27K subscribers
105 photos
41 videos
12 files
326 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
#پست_جدید

💎 سیگنال‌ها در جنگو 💎

امروز میخوایم در مورد یکی از ابزارهای جذاب و کاربردی جنگو به اسم سیگنال‌ها (signals) صحبت کنیم.
سیگنال‌ها مثل یه جور اعلان یا نوتیفیکیشن هستن که وقتی اتفاق خاصی توی پروژه شما میفته، ارسال میشن.
مثلا وقتی یه کاربر جدید ثبت‌نام می‌کنه، یه داده جدید اضافه میشه یا یه مدل حذف میشه، سیگنالی ارسال میشه.

سیگنال‌ها چه شکلی هستن؟

سیگنال‌ها به چند دسته کلی تقسیم میشن:

1️⃣ سیگنال‌های مدل: این سیگنال‌ها به تغییرات در مدل‌های شما مربوط میشن. مثلا وقتی یه رکورد جدید اضافه میشه، تغییر می‌کنه یا حذف میشه، سیگنالی ارسال میشه.

2️⃣ سیگنال‌های مدیریت: این سیگنال‌ها به عملیات مدیریت پایگاه داده مربوط میشن. مثلا وقتی شما دستور migrate رو اجرا می‌کنید، سیگنالی ارسال میشه.

3️⃣ سیگنال‌های درخواست/پاسخ: این سیگنال‌ها به درخواست‌ها و پاسخ‌های HTTP مربوط میشن. مثلا وقتی یه درخواست به سرور شما ارسال میشه یا پاسخ داده میشه، سیگنالی ارسال میشه.

4️⃣ سیگنال‌های تست: این سیگنال‌ها به اجرای تست‌های شما مربوط میشن.

5️⃣ سیگنال‌های دیتابیس: این سیگنال‌ها به اتصال به دیتابیس مربوط میشن.

6️⃣ سیگنال‌های اپ احراز هویت: این سیگنال‌ها به عملیات مربوط به احراز هویت کاربران مربوط میشن.


🔬 مثال‌های عملی از سیگنال‌ها:

1️⃣ مثال 1: ارسال ایمیل خوشامدگویی پس از ثبت‌نام کاربر

from django.db.models.signals import post_save
from django.dispatch import receiver
from django.core.mail import send_mail  


from .models import User

@receiver(post_save, sender=User)
def send_welcome_email(sender, instance, created, **kwargs):
    if created:  

        send_mail(
            'خوش آمدید!',
            'از ثبت‌نام شما در سایت ما متشکریم.',
            '[email protected]',
            [instance.email],
            fail_silently=False,
        )


در این مثال، هر وقت یک کاربر جدید ثبت‌نام میشه، سیگنال post_save برای مدل User ارسال میشه و تابع send_welcome_email اجرا میشه و یک ایمیل خوشامدگویی برای کاربر جدید ارسال می‌شود.


2️⃣ مثال 2: ایجاد پروفایل کاربری به صورت خودکار
from django.db.models.signals import post_save
from django.dispatch import receiver

from .models import User, Profile

@receiver(post_save, sender=User)
def create_profile(sender,  
instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

در این مثال، هر وقت یک کاربر جدید ثبت‌نام می‌شود، به طور خودکار یک پروفایل برای او ایجاد می‌شود.


3️⃣ مثال 3: بروزرسانی یک فیلد پس از تغییر فیلد دیگر
from django.db.models.signals import pre_save
from django.dispatch import receiver

from .models import MyModel

@receiver(pre_save, sender=MyModel)
def update_last_activity(sender, instance, **kwargs):
    if instance.is_active:
        instance.last_activity = datetime.now()


در این مثال، هر وقت فیلد is_active یک مدل تغییر کرد، فیلد last_activity هم به روز میشه.


مزایای استفاده از سیگنال‌ها:

کاهش کد تکراری: با استفاده از سیگنال‌ها، نیازی نیست کدهای تکراری رو در جاهای مختلف پروژه بنویسید.

📄 افزایش خوانایی کد: استفاده از سیگنال‌ها باعث میشه کد شما تمیزتر و خواناتر بشه.

🔺سهولت در توسعه: سیگنال‌ها به شما کمک می‌کنن تا برنامه‌های پیچیده‌تری رو توسعه بدید.


معایب استفاده از سیگنال‌ها:

😖 پیچیدگی: استفاده نادرست از سیگنال‌ها می‌تونه باعث پیچیدگی بیش از حد کد بشه.

🔋 کاهش سرعت: در بعضی موارد، استفاده از سیگنال‌ها می‌تونه سرعت اجرای برنامه رو کاهش بده.

نکات مهم:
از سیگنال‌ها با احتیاط استفاده کنید و از ایجاد حلقه‌های بی‌نهایت خودداری کنید.
سیگنال‌ها رو برای کارهای ساده و تکراری استفاده کنید.
برای کارهای پیچیده بهتره از ابزارهای دیگری مثل Celery استفاده کنید.

جمع‌بندی
سیگنال‌ها یک ابزار قدرتمند در جنگو هستن که به شما کمک می‌کنن تا برنامه‌های خودکارسازی شده و پیچیده‌تری رو توسعه بدید. با استفاده صحیح از سیگنال‌ها می‌تونید کدهای تمیزتر، خواناتر و قابل نگهداری‌تری بنویسید.

#سیگنال #signals #django #backend
👍103🥴1