2011-07-24 21 views
6

मेरे नियंत्रक मेरे web2py ऐप में थोड़ी सी अव्यवस्थित हो रहे हैं, और मैं फ़ंक्शन को किसी अन्य स्थान पर ले जाना चाहता हूं।वेब नियंत्रक को मेरे नियंत्रकों की सफाई

मैं शुरुआत में उन्हें मॉड्यूल में ले जाने के बारे में सोच रहा था, लेकिन मैं कभी-कभी डीबी तक पहुंचता हूं, और अन्य पैरामीटर db.py में सेट करते हैं (मुझे उपयोगकर्ता आईडी के लिए, अब दिनांक के लिए, आदि)।

क्या इन कार्यों को एक नई फ़ाइल में स्थानांतरित करने का एक साफ तरीका है, जबकि अभी भी मुझे आवश्यक चरों तक पहुंच है? मैं from db import me, now

+0

यह मेरे लिए स्पष्ट नहीं है है उन फ़ाइलों के लिए पथ देना है: आप नियंत्रक फ़ोल्डर में अलग अलग फ़ाइलों में अपने नियंत्रकों के लिए चाहते हैं, जो पूरी तरह से संभव और सामान्य है, या उन्हें एक अलग फ़ोल्डर में रखने के लिए, जो AFAIK संभव नहीं है। – ravenspoint

उत्तर

6

पर नियंत्रक क्रियाओं (यानी, यूआरएल में दिखाई देने वाली क्रियाओं) को नियंत्रक फ़ाइल में परिभाषित किया जाना चाहिए (यानी, आप उन्हें मॉड्यूल में नहीं ले जा सकते हैं)। हालांकि, अगर आपके नियंत्रक में कोई फ़ंक्शन नहीं है जो क्रियाएं नहीं हैं, तो आप उन्हें मॉड्यूल में ले जा सकते हैं। मान लें कि आप उन कार्यों को मॉडल या नियंत्रक से कॉल करेंगे, आप केवल db, me, और now ऑब्जेक्ट्स को उन कार्यों के लिए तर्कों के रूप में पास कर सकते हैं। एक और विकल्प उन्हें थ्रेड स्थानीय current ऑब्जेक्ट में जोड़ना है, जिसे मॉड्यूल से एक्सेस किया जा सकता है। एक मॉड्यूल में

from globals import current 
current.app.db = db 
# etc. 

: एक मॉडल में

ऐसा करने के लिए

from globals import current 

def func(*args): 
    db=current.app.db 
    # etc. 
+0

क्या ऐसा करने के लिए कोई प्रदर्शन हिट है? –

+1

मुझे यकीन नहीं है। मुझे ज्यादा नहीं लगता। ध्यान दें, उपर्युक्त पैटर्न यह है कि फ्रेमवर्क के ऑथ, क्रूड और मेल सिस्टम कैसे काम करते हैं। – Anthony

3

आप मॉड्यूल फ़ोल्डर में अजगर फ़ाइलों को बनाने और उन्हें कितना आप में अजगर पुस्तकालयों आयात की तरह आयात कर सकते हैं अपने नियंत्रकों। लेकिन आप की तरह

 from applications.myApp.modules.myModule import *

यह मेरा रैपर के लिए मेरे समाधान

+2

यदि मॉड्यूल वर्तमान अनुप्रयोग के 'मॉड्यूल' फ़ोल्डर में है, तो आपको पूर्ण पथ निर्दिष्ट करने की आवश्यकता नहीं है - बस मॉड्यूल नाम का उपयोग स्वयं ही करें। उदाहरण के लिए, यदि आपके पास mymodule.py/application/myapp/मॉड्यूल में है, तो आप 'myapp' एप्लिकेशन कोड में कहीं से भी mymodule आयात * से कर सकते हैं। – Anthony

संबंधित मुद्दे