2016-03-09 5 views
7

पर कोड निष्पादित करें मैं Django 1.9.3 का उपयोग कर रहा हूं। मेरे पास कई ऐप्स के साथ एक प्रोजेक्ट है। मैं प्रोजेक्ट के स्टार्टअप पर ऐप में से किसी एक की टेबल अपडेट करना चाहता हूं।Django - स्टार्ट-अप

उपयोग-केस:

उदाहरण के लिए, मान लीजिए कि मैं अपनी वेबसाइट पर आइटम बेचने के लिए चाहते हैं। मेरे पास एक ऐप है जिसमें मॉडल आइटम है। मेरे पास Django के बाहर एक वेब-सेवा है जो "give_all_items_available()" सेवा प्रदान करती है। मैं अपने उपयोगकर्ता को वेब साइट का उपयोग कर वस्तुओं की सूची प्रदान करना चाहता हूं। इसलिए मुझे लगता है कि मुझे उस वेब-सेवा इनपुट के साथ नियमित रूप से अपना डेटाबेस अपडेट करना होगा (स्टार्ट-अप और प्रत्येक बार एक बार)।

मैं सभी कोड लिखा है, ऐसा लगता है निम्नलिखित लग रहा है (यह एक उदाहरण है):

from my_app.models import My_table 

def on_startup(): 
    my_thread = Thread(execute = populate_tables, loopmode = True, background = True) # thread running in loopmode in background 
    my_thread.start() # starts the thread and returns 

def populate_tables() 
    response = call_webservice() # let's imagine this method returns data for creating a new model instance 
    My_table(response).save() # this save() isn't threadsafe in this example, but that's not my point ;-) 

मेरे समस्या मैं कहाँ इस कोड को लिखने के लिए

प्रयास नहीं जानता है:

अब तक, Django 1.6.5 के साथ, मैं init से कुछ कोड के साथ आया था। मेरे ऐप की फ़ाइल। यह काम कर रहा था, लेकिन मैंने सोचा कि यह काफी बदसूरत था (एक "आयात" के साथ धागा शुरू करना वास्तव में छुपा कोड जैसा दिखता है)।

मैंने Django 1.9 "तैयार()" विधि में देखा। लेकिन यह इस विधि में मॉडल से निपटने के लिए प्रलेखन में लिखा गया है, इसलिए मैं उलझन में हूं।

मैं अपने सर्वर से शुरू होने वाले कमांड में स्टार्टअप कोड जोड़ सकता हूं लेकिन यह स्टार्टअप कोड ऐप उन्मुख है और मेरी राय में, परियोजनाओं के पास इसके साथ कुछ लेना देना नहीं है।

आप क्या सलाह देंगे?

यदि आवश्यक हो तो मुझे अधिक जानकारी प्रदान करने में खुशी होगी।

अग्रिम धन्यवाद,

+1

आपको [इस स्टैक ओवरफ्लो प्रश्न] में कुछ उपयोगी मिल सकता है (http://stackoverflow.com/questions/2781383/where-to-put-django-startup-code)। – Robin

+0

मैंने इसे पहले ही देखा है, इस लिंक के स्वीकृत उत्तर में "तैयार()" विधि है जो मैं करता हूं। लेकिन Django डॉक्टर के अनुसार, इस विधि में मॉडल के साथ बातचीत करने के लिए यह एक बुरा अभ्यास है ... –

+3

इस मामले में "स्टार्टअप" का क्या अर्थ है? आम तौर पर आप एक बार वेबसाइट शुरू करते हैं, और फिर यह लगातार चलता है। माइग्रेशन में उदाहरण के बजाय, आपको "स्टार्टअप" पर तालिकाओं को पॉप्युलेट करने की आवश्यकता क्यों है? –

उत्तर

1

आप Celery का उपयोग नहीं करते क्यों बजाय? मुझे पता है कि आप स्टार्ट-अप पर अपनी आइटम टेबल को कैसे पॉप्युलेट करना चाहते हैं, इसके बारे में पूछ रहे हैं, लेकिन ... मुझे लगता है कि एक निर्धारित सेलेरी कार्य यहां आपकी समस्या के प्राकृतिक तरीके से फिट बैठता है और हल करता है।

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करें। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/11771232) –

+0

@ माइकसी, मैं आपको टिप्पणी की सराहना करता हूं, लेकिन उत्तर का आवश्यक हिस्सा शामिल है: "एक निर्धारित कार्य", मैंने भी एक का नाम शामिल किया उपकरण जिसे हम हल करने के लिए उपयोग कर सकते हैं: सेलेरी, लिंक इस टूल के लिए सिर्फ एक शॉर्टकट है। – trinchet

+1

अच्छी तरह से सेलेरी एक विकल्प हो सकता है, लेकिन मुझे लगता है कि Django पहले से ही तरीके से करने के तरीके प्रदान करता है जो मुझे अजवाइन के निर्भर होने के बिना आवश्यक था। दरअसल, जिस दिन मैं अपने कार्यक्रम को बेहतर बनाने के लिए सेलेरी का उपयोग करूंगा, तब मैं इसके बारे में सोचूंगा लेकिन मैं केवल इसके लिए सेलेरी पर निर्भर नहीं होना चाहता हूं। प्रबंधन की बात यह है कि मुझे जो चाहिए वह मुझे लगता है, अब तक यह काम करता है –