2012-05-09 9 views
5

से डेटा भेजने के लिए मैं Angularjs और Django सर्वर पर इसके $ http मॉड्यूल का उपयोग करके एक पोस्ट AJAX अनुरोध भेज रहा हूं। यहां एक उदाहरण दिया गया है:angularjs से django

$http({ 
     method: 'POST', 
     url: '/url/', 
     data: 'test data' 
    }). 
    success(function(data, status, headers, config) { 
     doSomeStuffWhenSuccess(); 
    }); 

समस्या मैं Django में प्राप्त करता हूं। कोई फर्क नहीं पड़ता कि मैं डेटा भेजता हूं हमेशा QueryDict ऑब्जेक्ट की कुंजी है और इसका मान हमेशा खाली सूची है।

<QueryDict: {u'test data': [u'']}> 

मेरे पास कोई सुराग नहीं है। मैं क्या खो रहा हूँ?

मैं लगभग डिफ़ॉल्ट डिफ़ॉल्ट डीजेंगो एप्लिकेशन का उपयोग केवल डिफ़ॉल्ट मध्यवर्ती के साथ करता हूं। मैंने केवल एक दृश्य बनाया और यूआरएल कॉन्फ़िगरेशन में एक यूआरएल सेट किया। Django का संस्करण 1.3 है। और मैंने Django को संतुष्ट करने के लिए हमेशा एक हेडर containg csrf टोकन भेजने के लिए कोणीय के $ http मॉड्यूल को कॉन्फ़िगर किया।

उत्तर

6

मेरा मानना ​​है कि django सोचता है कि आप एक urlencoded रूप भेज रहे हैं, पूर्व। कुंजी = मान & कुंजी 2 = मान 2 ...

अगर आप कोशिश करेंगे:

$http({ 
    method: 'POST', 
    url: '/url/', 
    data: 'test=data' 
}) 

आप

<QueryDict: {u'test': [u'data']}> 

तुम हमेशा डेटा प्राप्त कर सकते हैं मिलना चाहिए (कच्चे शरीर सामग्री) के रूप में :

request.body 

आशा है कि आप यही देख रहे हैं।

+0

धन्यवाद यह काम करता है! लेकिन क्या आप समझा सकते हैं कि क्यों django अपने urlencoded डेटा सोचता है? और यदि इसे अनुकूलित करना संभव है? – davekr

+1

request.GET और request.POST में प्रीप्रोसेस्ड कुंजी/मान डेटा शामिल है - यदि आप कच्चे डेटा (जैसे JSON या सादा पाठ) चाहते हैं तो प्रयास करें: request.raw_post_data –

7

मैंने इसे jQuery परम फ़ंक्शन के साथ हल किया। मुझे लगता है कि यह अधिक सुरुचिपूर्ण समाधान है।

$http({ 
    method: 'POST', 
    url: '/url/', 
    data: $.param({test: data}) 
}) 

अब यह काम करता है जैसे मैं चाहता था।