এই যোগ করা হয়েছিল ডকুমেন্টেশন যখন জ্যাঙ্গো 1.7 মুক্তি:
কড়া কথায় বলতে গেলে, সিগন্যাল হ্যান্ডলিং এবং রেজিস্ট্রেশন কোড আপনার পছন্দ মতো যে কোনও জায়গায় বাস করতে পারে, যদিও অ্যাপ্লিকেশনটির মূল মডিউল এবং এর মডেলগুলির মডিউলটি আমদানি কোডের পার্শ্ব-প্রতিক্রিয়া হ্রাস করার জন্য এড়ানো বাঞ্ছনীয়।
অনুশীলনে, সংকেত হ্যান্ডলারগুলি সাধারণত তারা সম্পর্কিত অ্যাপ্লিকেশনটির সিগন্যাল সাবমডিউলে সংজ্ঞায়িত হয়। সিগন্যাল রিসিভারগুলি আপনার অ্যাপ্লিকেশন কনফিগারেশন ক্লাসের প্রস্তুত () পদ্ধতিতে সংযুক্ত রয়েছে। আপনি যদি রিসিভার () সাজসজ্জার ব্যবহার করে থাকেন তবে কেবল প্রস্তুত অভ্যন্তরের সিগন্যাল সাবমডিউলটি আমদানি করুন)
জাজানো ১.7 এ পরিবর্তন করা হয়েছে: যেহেতু জ্যাঙ্গোর আগের সংস্করণগুলিতে প্রস্তুত () উপস্থিত ছিল না, তাই সাধারণত সিগন্যাল নিবন্ধন মডেলগুলির মডিউলে ঘটে।
সেরা অনুশীলন হ্যান্ডলারের মধ্যে আপনার হ্যান্ডলারগুলি সংজ্ঞায়িত করা হয় pyপি একটি সিগন্যাল সাবমডিউলে, উদাহরণস্বরূপ এমন একটি ফাইল যা:
ইউর্যাপ / সিগন্যাল / হ্যান্ডলার.পি :
from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import MyModel
@receiver(pre_save, sender=MyModel)
def my_handler(sender, **kwargs):
pass
আপনার সিগন্যাল হ্যান্ডলারটি নিবন্ধ করার সেরা জায়গাটি তখন প্রস্তুত () পদ্ধতি ব্যবহার করে অ্যাপ্লিকেশনটির অ্যাপকনফিগে রয়েছে it এটি এর মতো দেখাবে:
yourapp / apps.py :
from django.apps import AppConfig
class TasksConfig(AppConfig):
name = 'tasks'
verbose_name = "Tasks"
def ready(self):
import yourproject.yourapp.signals.handlers #noqa
আপনার অ্যাপসফোনফিগটি সরাসরি আপনার সেটিংস.পিসির INSTALLED_APPS এ বা __init__
আপনার অ্যাপ্লিকেশনটিতে নির্দিষ্ট করে আপনার অ্যাপকনফিগটি লোড করা হচ্ছে তা নিশ্চিত করুন। আরও তথ্যের জন্য প্রস্তুত ডকুমেন্টেশন দেখুন।
দ্রষ্টব্য: আপনি যদি অন্য অ্যাপ্লিকেশনগুলিকেও খুব ভালভাবে শোনার জন্য সংকেত সরবরাহ করে থাকেন তবে সেগুলি __init__
আপনার সিগন্যাল মডিউলে রাখুন, উদাহরণস্বরূপ এমন ফাইল যা:
yourapp / সংকেত / __ init__.py
import django.dispatch
task_generate_pre_save = django.dispatch.Signal(providing_args=["task"])
এর পরে অন্য অ্যাপ্লিকেশনটি আপনার সিগন্যালটি আমদানি করে এবং এটি রেজিস্টার করে শুনতে পারে, যেমন from yourapp.signals import task_generate_pre_save
। আপনার হ্যান্ডলারগুলির থেকে আপনার সিগন্যাল পৃথক করা জিনিস পরিষ্কার রাখে।
জাজানো 1.6 এর জন্য নির্দেশনা:
আপনি যদি এখনও জ্যাঙ্গো ১.6 বা তার চেয়ে কম স্থানে আটকে থাকেন তবে আপনি একই জিনিসটি করবেন (ইউর্যাপ / সিগন্যাল / হ্যান্ডলার্স.পিতে আপনার হ্যান্ডলারগুলি সংজ্ঞায়িত করুন) তবে অ্যাপকনফিগ ব্যবহার না করে আপনি হ্যান্ডলারগুলি __init__.py এর মাধ্যমে লোড করবেন আপনার অ্যাপ্লিকেশন, যেমন:
yourapp / __ init__.py
import signals
এটি প্রস্তুত () পদ্ধতিটি ব্যবহার করার মতো সুন্দর নয় কারণ এটি প্রায়শই বিজ্ঞপ্তি আমদানির সমস্যার কারণ হয়ে থাকে।