2013-04-25 10 views
8

मैं एक कर्ल का उपयोग कर पोस्ट करने के लिए कोशिश कर रहा हूँ है:Django और TastyPie: request.POST खाली

curl --dump-header - -H "Content-Type: application/json" -X POST --data '{"item_id": "1"}' http://www.mylocal.com:8000/api/1/bookmarks/ 

हालांकि, request.POST हमेशा खाली है।

class BookmarkResource(ModelResource): 


    class Meta: 
     queryset = Bookmark.objects.all()  
     resource_name = 'bookmarks' 
     fields = ['id', 'tags'] 
     allowed_methods = ['get', 'post', 'delete', 'put'] 
     always_return_data = True 
     authorization= Authorization() 
     include_resource_uri = False 

    def determine_format(self, request): 
     return "application/json" 

    def obj_create(self, bundle, **kwargs): 

     request = bundle.request 

     try: 
      payload = simplejson.loads(request.POST.keys()[0]) 
     except: 
      payload = simplejson.loads(request.POST.keys()) 

किसी को जानता है कि मैं क्या याद कर रहा हूँ:

नीचे मेरी ModelResource कोड है?

अग्रिम धन्यवाद।

उत्तर

29

Django 1.5 से शुरू, POST में अब गैर-फॉर्म डेटा नहीं है। वे अब अनुरोध में हैं। कोई।

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.POST

+0

यह भी देखें http://stackoverflow.com/questions/1208067/wheres-my-json-data-in-my-incoming-django-request। – Seth

+1

@ डेनरोआ "फॉर्म डेटा" और "गैर-फॉर्म डेटा" क्या अंतर करता है? – rrauenza

+1

... Django स्रोत को देखते हुए, ऐसा लगता है कि इसे '_load_post_and_files()' में परिभाषित किया गया है और 'CONTENT_TYPE' -' multipart/form-data' और 'application/x-www-form-urlencoded 'पर निर्भर करता है। – rrauenza

0

मैं एक cURL उम्मीद लेकिन क्रोम देव उपकरणों मेरी --data के रूप में देखा के बाहर एक पोस्ट अनुरोध को कॉपी इस प्रकार नहीं कर रहा हूँ:

--data "foo=bar&bar=foo"

तो यह लगता है कि आप करने के लिए अपने आदेश को बदलने के लिए चाहते हो सकता है जैसे:

--data item_id="1"

साइड नोट: मैं अत्यधिक followin में से किसी की सिफारिश कर सकते

Advanced REST client या Dev HTTP Client

साथ ही यदि आप एक ब्राउज़र में कॉल (प्रपत्र सबमिट या इस तरह की तरह) बना सकते हैं तो क्रोम देव उपकरणों नेटवर्क पैनल में आप एक के रूप में अनुरोध कॉपी कर सकते हैं: जी क्रोम HTTP अनुरोध बनाने के लिए एप्लिकेशन curl कमांड (उस पर राइट क्लिक करें)

+0

मैं एक बाकी ग्राहक Chrome एप्लिकेशन की कोशिश की और मैं एक ही मुद्दा था। – dannyroa

+0

क्या आपने पीडीबी/आईपीडीबी की कोशिश की है कि यह देखने के लिए कि 'अनुरोध' पर क्या उपलब्ध है? – rockingskier

+0

हाँ, मैंने आईपीडीबी का उपयोग इसके माध्यम से करने के लिए किया था। आरईएसटी क्लाइंट पर, मैंने सामग्री-प्रकार को "एप्लिकेशन/जेसन" पर सेट किया है। – dannyroa

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