2010-06-09 17 views
9

मैं वेब 2py फ्रेमवर्क का उपयोग कर एक ऐप बना रहा हूं ... मैं सभी क्वेरीस्ट्रिंग पैरामीटर प्राप्त करने के लिए अनुरोध ऑब्जेक्ट का उपयोग नहीं करना चाहता, इसके बजाय मैं नाम नियंत्रकों के साथ अपना नियंत्रक बनाना चाहता हूं और राउटर अनपैक करना चाहता हूं क्वेरीस्ट्रिंग (या फॉर्म डेटा) शब्दकोश नामित पैरामीटर में शब्दकोश और मेरे नियंत्रक को कॉल करें।वेब 2py नियंत्रक?

तो बजाय मैं कहाँ वैश्विक अनुरोध() वस्तु का उपयोग करें और वार्स सूची के माध्यम से विचार करेंगे

create_user(): 

के एक नियंत्रक विधि ... मैं बजाय पसंद करेंगे के लिए

create_user(first_name, last_name, email): 

जैसे कि मैं अन्य एमवीसी प्लेटफार्मों में देखता हूं।

क्या यह वेब 2py में पहले से ही संभव है? या इसके लिए एक प्लगइन है? या मुझे खुद को जोड़ने की ज़रूरत है?

उत्तर

11

संख्या के रूप में, book में कहा गया है प्रपत्र आवेदन करने के लिए

http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2 

नक्शे (फ़ोल्डर) a, नियंत्रक (फाइल) c.py, समारोह f, और अतिरिक्त युक्तियों के URL से अनपैक किया जाना चाहिए अनुरोध वस्तु

x, y, z = tuple(request.args) 
p = request.vars['p'] # p=1 
q = request.vars['q'] # q=2 

इसके अलावा, web2py विशेष रूप से वैध नियंत्रक कार्यों को उन कार्यों के रूप में पहचानता है जिनके पास कोई तर्क नहीं है। AFAICR, यह Django के विपरीत है जो वैध नियंत्रक कार्यों का पता लगाता है जिनके पास कम से कम एक तर्क है।

+0

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

+0

उपरोक्त @service सजाए गए कार्यों के मामले में सत्य नहीं है। पैरामीटर के साथ एक नियंत्रक समारोह मान्य हो सकता है जब इस सजावट में लपेटा जाता है। यह सटीक ओपी परिदृश्य नहीं है लेकिन उसकी समस्या का वैकल्पिक समाधान प्रदान कर सकता है; नीचे मेरा जवाब देखें। –

+0

हाँ पुस्तक 'http: //127.0.0.1: 8000/a/c/f.html/x/y/z? P = 1 और q = 2' है, लेकिन मुझे पैरामीटर ** dist (request.vars) प्राप्त होता है * * ¿खराब अभ्यास है? –

2

मैं

def create_user(): 
    try: 
     first_name, last_name, email = request.args[:3] 
    except: 
     redirect('some_error_page') 

है, लेकिन है कि FIRST_NAME, LAST_NAME मन और ईमेल वर्ण (जब मान्य जिन्हें केवल [\ w \। - \] picky में web2py अनुमति दी जाती है) कि PATH_INFO में अनुमति नहीं है हो सकती है ।

+0

अरे यह अच्छा है!मैं एक अजगर नौसिखिया हूँ ... इसलिए यह नहीं पता था कि थोड़े प्रारंभिकता संभव थी। धन्यवाद! –

1

ऐसी परिस्थिति है जिसमें वेब 2py नियंत्रक पैरामीटर का उपयोग कर सकते हैं। एक नियंत्रक समारोह @service डेकोरेटर होता है, मानकों, इस्तेमाल किया जा सकता सेवा प्रकार के आधार पर, उदाहरण के लिए:

@service.jsonrpc 
def somefunction(a=None, b='default'): 
    ## whatever 

यह दृष्टिकोण एक नियंत्रक समारोह वास्तव में एक एपीआई, नहीं एक तरह से एक उत्पन्न करने के लिए है जब के लिए है वेब दृश्य वेब-व्यू और एपीआई-स्टाइल फ़ंक्शंस को समानांतर में परिभाषित करने के मामले में आप अच्छी चीजें कर सकते हैं, और वेब दृश्यों को एपीआई फ़ंक्शंस को कॉल करने के लिए, यह सुनिश्चित करने के लिए कि आपके पास & नियंत्रकों के अच्छे अलगाव हैं।

वेब क्लाइंट/जावास्क्रिप्ट, वेब 2py व्यू, और वेब 2py नियंत्रक के बीच जिम्मेदारियों को विभाजित करने के तरीके को चुनने के आधार पर, यह पैरामीटर बनाने के बजाय वास्तव में एपीआई (वैकल्पिक पैरामीटर के साथ) नियंत्रक कार्यों को समझने में सक्षम हो सकता है वेब-व्यू शैली नियंत्रक में तर्क को अनपॅक करना।

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