सिग्नल सहेजें/हटाएं आमतौर पर उन परिस्थितियों में अनुकूल होते हैं जहां आपको ऐसे परिवर्तन करने की आवश्यकता होती है जो मॉडल में पूरी तरह से विशिष्ट नहीं हैं, या उन मॉडलों पर लागू किया जा सकता है जिनमें कुछ सामान्य है, या पूरे उपयोग के लिए कॉन्फ़िगर किया जा सकता है मॉडल के।
ओवरराइड save
विधियों में एक आम कार्य मॉडल में कुछ टेक्स्ट फ़ील्ड से स्लग की स्वचालित पीढ़ी है। यह कुछ ऐसा उदाहरण है, यदि आपको इसे कई मॉडलों के लिए लागू करने की आवश्यकता है, तो pre_save
सिग्नल का उपयोग करने से लाभ होगा, जहां सिग्नल हैंडलर स्लग फ़ील्ड का नाम ले सकता है और स्लग उत्पन्न करने के लिए फ़ील्ड का नाम ले सकता है । एक बार जब आपके पास ऐसा कुछ हो, तो आपके द्वारा रखी गई कोई भी उन्नत कार्यक्षमता सभी मॉडलों पर भी लागू होगी - उदा। विशिष्टता सुनिश्चित करने के लिए, प्रश्न में मॉडल के प्रकार के लिए जोड़ने के लिए आप जिस स्लग को जोड़ रहे हैं उसे देख रहे हैं।
पुन: प्रयोज्य अनुप्रयोगों को अक्सर संकेतों के उपयोग से लाभ होता है - यदि वे जो कार्यक्षमता प्रदान करते हैं उन्हें किसी भी मॉडल पर लागू किया जा सकता है, वे आम तौर पर (जब तक यह अपरिहार्य नहीं है) नहीं चाहते हैं कि उपयोगकर्ताओं को लाभ के लिए अपने मॉडल को सीधे संशोधित करना पड़े यह।
django-mptt के साथ, उदाहरण के लिए, मैं pre_save
संकेत क्षेत्रों जो मॉडल है जो के बारे में बनाया है या अद्यतन करने की है के लिए एक वृक्ष संरचना का वर्णन का एक सेट और pre_delete
संकेत प्रबंधन करने के लिए वस्तु होने के लिए वृक्ष संरचना विवरण निकालने के लिए किया हटा दिया गया है और इसके पहले ऑब्जेक्ट्स का पूरा उप-पेड़ इससे पहले और वे हटा दिए गए हैं। सिग्नल के उपयोग के कारण, उपयोगकर्ताओं को उनके प्रबंधन के लिए save
या delete
विधियों को जोड़ने या संशोधित करने की आवश्यकता नहीं है, उन्हें सिर्फ django-mptt को यह पता होना है कि वे कौन से मॉडल प्रबंधित करना चाहते हैं।
स्रोत
2008-10-05 08:38:39
नहीं है, संकेत ब्लॉक जब तक आप धागे को स्पष्ट रूप से अंडे। – muhuk
@ मुहुक सही है, संकेत आपकी प्रक्रियाओं को अवरुद्ध करते हैं। यदि आप अवरुद्ध प्रक्रियाओं से बचना चाहते हैं तो गीवेंट, अजवाइन, या अन्य असीमित उपकरण जैसे टूल का उपयोग करें। – pydanny
मैं इसे मुहुक और पाइडनी के बिंदुओं के कारण -1 देता हूं। ऐसा लगता है कि यह पूरी तरह से गलत सलाह है। अनुरोध तब तक खत्म नहीं होगा जब तक सिग्नल प्रोसेसिंग नहीं की जाती। तो अजवाइन एक अच्छा समाधान की तरह लगता है, जो मैं आमतौर पर अपने django परियोजनाओं में उपयोग करता हूं। –