2012-06-17 14 views
6

को स्क्वैश करता है मुझे Django's Querydict bizarre behavior: bunches POST dictionary into a single key और Unit testing Django JSON View के समान समस्या है। हालांकि, इन धागे में कोई भी प्रश्न/प्रतिक्रिया वास्तव में निर्दिष्ट समस्या पर इंगित नहीं करती है। मैं एक नेस्टेड JSON ऑब्जेक्ट के साथ अनुरोध भेजने के लिए Django के परीक्षण क्लाइंट का उपयोग करने की कोशिश कर रहा हूं (जो मैंने जेएसओएन ऑब्जेक्ट्स के साथ गैर-JSON मानों के साथ अच्छी तरह से काम किया है)।डीजेगो टेस्ट क्लाइंट नेस्टेड JSON

प्रयास # 1:

response = c.post('/verifyNewMobileUser/', 
     {'phoneNumber': user.get_profile().phone_number, 
     'pinNumber': user.get_profile().pin, 
     'deviceInfo': {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067', 'deviceType': 'I'}}) 

आप देख सकते हैं, मैं अपने अनुरोध डेटा के भीतर एक नेस्टेड JSON ऑब्जेक्ट है: यहाँ मेरी प्रारंभिक कोड है। बहरहाल, यह क्या request.POST लग रहा है जैसे:

<QueryDict: {u'phoneNumber': [u'+15551234567'], u'pinNumber': [u'4171'], u'deviceInfo': [u'deviceType', u'deviceID']}> 

प्रयास # 2: तो मैं करने की कोशिश की है, इस प्रकार सामग्री प्रकार पैरामीटर पर जोड़ने:

response = c.post('/verifyNewMobileUser/', 
    {'phoneNumber': user.get_profile().phone_number, 
    'pinNumber': user.get_profile().pin, 
    'deviceInfo': {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067', 'deviceType': 'I'}}, 
    'application/json') 

और अब मैं क्या मिलेगा अनुरोध के लिए। POST

<QueryDict: {u"{'deviceInfo': {'deviceType': 'I', 'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067'}, 'pinNumber': 5541, 'phoneNumber': u' 15551234567'}": [u'']}> 

मैं बस इतना करना चाहता हूं कि मेरे अनुरोध डेटा के लिए नेस्टेड dict निर्दिष्ट करने में सक्षम हो। क्या इसे करने का कोई आसान तरीका है?

उत्तर

13

मेरे लिए निम्नलिखित काम करता है (नाम आर्ग उपयोग करते हुए):

geojson = { 
     "type": "Point", 
     "coordinates": [1, 2] 
    } 

    response = self.client.post('/validate', data=json.dumps(geojson), 
           content_type='application/json') 
+0

JSON.dumps इसे करने का सबसे अच्छा तरीका है। यह स्वीकार्य उत्तर होना चाहिए। – boatcoder

6

आपकी समस्या इंगित करती है कि Django application/json के बजाय multipart/form-data के रूप में आपके अनुरोध की व्याख्या कर रहा है।

c.post("URL", "{JSON_CONTENT}", content_type="application/json") आज़माएं।

देखने के लिए एक और बात यह है कि पायथन स्ट्रिंग्स के रूप में प्रस्तुत किए जाने पर सिंगल कोट्स का उपयोग करके शब्दकोश कुंजी/मानों का प्रतिनिधित्व करता है, जिसे सरलजसन पार्सर पसंद नहीं करता है। , एकल उद्धृत स्ट्रिंग के रूप में अपनी हार्ड-कोडेड JSON ऑब्जेक्ट रखें दोहरे उद्धरण चिह्नों के अंदर का उपयोग कर इस के आसपास पाने के लिए ...

0

मेरे समाधान है निम्नलिखित:

परीक्षा पद्धति में:

data_dict = {'phoneNumber': user.get_profile().phone_number, 
      'pinNumber': user.get_profile().pin, 
      'deviceInfo': 
       {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067', 
        'deviceType': 'I'}}) 

self.client.post('/url/', data={'data': json.dumps(data_dict)}) 

ध्यान में रखते हुए:

json.loads(request.POST['data']) 

यह एक स्ट्रिंग के रूप में पोस्ट ['डेटा'] भेजता है। दृश्य में किसी को उस स्ट्रिंग से जेसन लोड करना होगा।

धन्यवाद।

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