2012-07-02 11 views
5

मेरे पाइथन पिरामिड एप्लिकेशन में मेरे कुछ HTML रूप हैं। जब मैं जावास्क्रिप्ट सक्षम होता हूं और जब जावास्क्रिप्ट अक्षम होता है तो मैं उन्हें AJAX के माध्यम से काम करना चाहता हूं। अब मैं AJAX और सामान्य फॉर्म पोस्ट के लिए अलग-अलग विचारों का उपयोग करता हूं, लेकिन प्रतिक्रिया को छोड़कर कोड इन कार्यों के लिए लगभग समान लगता है। मैं इस (कक्षा शरीर) की तरह देखने वर्ग का उपयोग करें:अजाक्स/एचटीएमएल फॉर्म पदों को संभालने के लिए पाइथन पिरामिड विचारों को एकजुट करने के लिए कैसे करें

def ajax_ok(self, msg): 
    return Response(body=msg) 

def ajax_error(self, msg): 
    return HTTPInternalServerError(body=msg) 

@action(xhr=True, renderer='json', name='ftp') 
def ftp_ajax(self): 
    log.debug('View: %s', 'ftp (ajax)') 
    if 'form.submitted' in self.params: 
     try: 
      self.config.save(self.params) 
     except: 
      return self.ajax_error('some error') 
     else: 
      return self.ajax_ok('ok') 

@action() 
def ftp(self): 
    if 'form.submitted' in self.params: 
     try: 
      self.config.save(self.params) 
     except: 
      self.request.session.flash('error; ' + msg) 
     else: 
      self.request.session.flash('success; ' + msg) 
    return {'content': render('templates/ftp.pt', {'ftp': 
                self.config.ftp})} 

मैं किसी भी अगर त्रुटि को संभालने और उन्हें html में दिखाने की जरूरत है। शायद मुझे finished_callback या मेरे स्वयं के प्रस्तुतकर्ता का उपयोग करना चाहिए जो विभिन्न अनुरोध प्रकार के लिए अलग-अलग प्रतिक्रिया भेजेगा ??

+0

ऐसा लगता है कि केवल 4 कोड पथों में से केवल एक ही है, इसलिए मुझे यकीन नहीं है कि आप क्या समेकित करने की उम्मीद कर रहे हैं। मैं कहूंगा कि सभी 'सेव' कार्यक्षमता को एक सामान्य स्थान पर संभालने के लिए पर्याप्त है और स्वतंत्र रूप से त्रुटि को संभालने में त्रुटि होती है। –

उत्तर

4

आप ऐसा ही कुछ कर सकता है:

@action(name='ftp', renderer='templates/ftp.pt') 
@action(xhr=True, renderer='json', name='ftp') 
def ftp_ajax(self): 
    log.debug('View: %s', 'ftp (ajax)') 

    # CODE 

    if request.is_xhr: 
     return JSON 
    else: 
     return something for template 

लेकिन आप वास्तव में महान कर यदि आप ऐसा ही कुछ हो सकता है:

@action(name='ftp', renderer='templates/ftp.pt') 
@action(xhr=True, renderer='json', name='ftp') 
def ftp_ajax(self): 
    log.debug('View: %s', 'ftp (ajax)') 
    my_values = dict() 

    # Code 

    return my_values 

लेकिन अपने वर्तमान कोड, कोड isn में ईमानदार होना आप में से बहुत समान नहीं है क्योंकि आप एक ही चीज़ वापस नहीं करते हैं और एक मामले में, आप कुछ इंफोस फ्लैश करने के लिए दबाव डालते हैं और दूसरे में आप कुछ चीजें वापस करते हैं।

उस स्थिति में, सब कुछ एक साथ विलय करने से अलग रखने के लिए बेहतर है। लेकिन यदि आप एक ही डेटा को अलग और वापस कर सकते हैं, तो आप एक साथ @action ढेर कर सकते हैं।

+0

मुझे आपका समाधान पसंद है लेकिन अब मुझे लगता है कि मुझे 2 समस्याएं थीं और दूसरी बात यह है कि विचारों में अपवादों का प्रबंधन कैसे करें (उसी स्थिति में - एचटीएमएल और AJAX रूपों को पोस्ट करते समय)। – marcinpz

+0

अपवाद बढ़ाने या अपवाद लौटने के बजाय आप इस तरह कुछ उपयोग कर सकते हैं। 'dict (ठीक = गलत, संदेश =" त्रुटि संदेश ") 'जब आपको कोई त्रुटि हो और' dict (ok = true, content = dict (...)) ' –

+0

ध्यान दें कि जेसन रेंडरर एक ऑब्जेक्ट सही ढंग से प्रस्तुत करेगा निरीक्षण कर सकते हैं, और टेम्पलेट भी उन मानों का उपयोग कर सकते हैं। मुझे पूरा यकीन है कि आप एक पहले से प्रस्तुत ईवेंट जोड़ सकते हैं जो ठीक है और is.xhr की जांच करेगा और अगर संदेश में आवश्यक है तो अपवाद फेंक दें। यह सबसे अच्छा नहीं हो सकता है लेकिन –

0

आपके पास सिर्फ एक विधि ftp हो सकती है और इसके अंदर यह जांचें कि request.is_xhr सही त्रुटि/प्रतिक्रिया प्रस्तुत करने के लिए सही है या नहीं।

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