Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Signal সিগন্যাল

Signal সিগন্যাল

Django Signals টিউটোরিয়াল পার্টসমূহ

  1. পার্ট ১: Django Signals এর ভূমিকা এবং মৌলিক ধারণা
    • Django Signals কী এবং এটির ব্যবহার।
    • Signals কিভাবে কাজ করে এবং এর প্রয়োজনীয়তা।
  2. পার্ট ২: Django এর Built-in Signals
    • Django এর কিছু গুরুত্বপূর্ণ Built-in Signals, যেমন post_save, pre_save, post_delete, pre_delete ইত্যাদি।
    • প্রতিটি Signal কী কাজ করে এবং এর ব্যবহার।
  3. পার্ট ৩: Custom Signal তৈরি এবং ব্যবহার
    • Django তে কাস্টম Signal কীভাবে তৈরি করা যায়।
    • Custom Signal তৈরি করার স্টেপ-বাই-স্টেপ গাইড এবং এটি ব্যবহার করার উদাহরণ।
  4. পার্ট ৪: Signal Receiver তৈরি এবং সংযোগ করা
    • Signal Receiver কী এবং কিভাবে এটি কাজ করে।
    • Receiver তৈরি করে Signal এর সাথে সংযোগ করার সঠিক পদ্ধতি।
  5. পার্ট ৫: Model Signals এবং Database Interaction
    • Model Signals কীভাবে মডেল সেভ, আপডেট এবং ডিলিট ইভেন্টগুলোতে কাজ করে।
    • Django মডেলে সিগন্যাল দিয়ে ডেটাবেজে বিশেষ কার্যক্রম করা।
  6. পার্ট ৬: Signals এর মাধ্যমে Email এবং Notification পাঠানো
    • Signal ব্যবহার করে ইমেইল বা নোটিফিকেশন পাঠানো।
    • ব্যবহারকারীর একশন ভিত্তিক ইমেইল নোটিফিকেশন সিস্টেম তৈরি।
  7. পার্ট ৭: Signal Dispatch এবং Disconnect করা
    • কিভাবে Signal পাঠানো যায় (send এবং send_robust), এবং বিভিন্ন মেথডের পার্থক্য।
    • কোন সিচুয়েশনে Signal Disconnect করতে হয় এবং এটি কীভাবে করা হয়।
  8. পার্ট ৮: Signals এর মধ্যে Error Handling
    • Signal এ Error Handling এবং Exception Management।
    • Signal Receiver এ Exception আসলে কীভাবে তা হ্যান্ডেল করা যায়।
  9. পার্ট ৯: Database Transactions এর সাথে Signal Synchronisation
    • Signal এবং Database Transaction কিভাবে একসাথে সমন্বিতভাবে কাজ করে।
    • Transaction কনটেক্সট এ Signal ব্যবহারের উদাহরণ।
  10. পার্ট ১০: Performance Optimization for Signals
    • Signals এর Performance অপ্টিমাইজেশন কৌশল।
    • Signal ব্যবহার করে কিভাবে মেমরি ও প্রসেসিং টাইম কমানো যায়।
  11. পার্ট ১১: Unit Testing এবং Signal Debugging কৌশল
    • Django Signal এর Unit Testing এবং টেস্ট লেখার নিয়ম।
    • Custom Signal Testing এবং Debugging করার সহজ পদ্ধতি।
  12. পার্ট ১২: Complex Workflow Management with Signals (Advanced)
    • জটিল Workflow এর ক্ষেত্রে Signal এর ব্যবহার।
    • Multiple Signals একত্রিত করে কমপ্লেক্স সিচুয়েশন ম্যানেজ করার উদাহরণ।

এই পার্টগুলো Django Signals এর প্রতিটি গুরুত্বপূর্ণ দিক নিয়ে বিশদ আলোচনা করবে এবং আপনাকে Django প্রজেক্টে Signal ব্যবহারের দক্ষতা অর্জনে সহায়তা করবে।

Django সিগন্যাল :

django সিগন্যাল ব্যবহার করে আমরা একটি মডেল সেভ করার সময় মডেলের ডেটা দিয়ে আরেকটি মডেল সেভ করতে পারি। মনে করি আমাদের author এবং book নামে দুইটি মডেল আছে আমরা চাচ্ছি যখন book মডেল সেভ হবে তখন author মডেল এর একটি ফিল্ড আপডেট হবে।

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    book_count = models.PositiveIntegerField(default=0)  # We'll update this field using signals

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

apps ফোল্ডারে signals.py নামে সিগন্যাল ফাইল তৈরী করি।

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Book, Author
@receiver(post_save, sender=Book)
def update_author_book_count(sender, instance, created, **kwargs):
    if created:
        # A new book is created, update the author's book count
        author = instance.author
        author.book_count = author.book_count + 1
        author.save()
        
        
post_save.connect(update_author_book_count, sender=Book)
                       

apps.py ফাইলে নিচের function ব্যবহার করে signal ইম্পোর্ট করি

    def ready(self):
           import Library.signals #Library is App Name

signal on update and delete model

from django.db import models
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver

class Author(models.Model):
    name = models.CharField(max_length=100)
    book_count = models.PositiveIntegerField(default=0)

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

@receiver(post_save, sender=Book)
def update_author_book_count_on_save(sender, instance, created, **kwargs):
    """
    Signal to update Author's book_count when a new Book is saved.
    """
    if created:  # Check if the Book is newly created
        author = instance.author
        author.book_count += 1
        author.save()

@receiver(post_delete, sender=Book)
def update_author_book_count_on_delete(sender, instance, **kwargs):
    """
    Signal to update Author's book_count when a Book is deleted.
    """
    author = instance.author
    if author.book_count > 0:
        author.book_count -= 1
        author.save()

How can we help?