2015-12-13 19 views
16

का उपयोग कर django documentation में बिना acessing पोस्ट क्षेत्र डेटा, यह कहते हैं:एक रूप (REST API) Django

HttpRequest.POST

एक शब्दकोश की तरह, कि उपलब्ध कराने के सभी दिए गए HTTP POST पैरामीटर युक्त वस्तु अनुरोध में फॉर्म डेटा है। नीचे QueryDict दस्तावेज देखें। यदि आपको अनुरोध में पोस्ट किए गए कच्चे या गैर-फॉर्म डेटा तक पहुंचने की आवश्यकता है, तो इसके बजाय HttpRequest.body विशेषता के माध्यम से इसे एक्सेस करें।

हालांकि, सर्वर किसी ब्राउज़र का जवाब नहीं देता है (जैसे जेएस फ्रेमवर्क या फॉर्म का उपयोग करना) लेकिन इसके बजाय एक एआरआईडी/आईओएस एप्लिकेशन द्वारा भेजा गया एक आरईएसटी एपीआई।

यदि ग्राहक सीधे POST अनुरोध में फ़ील्ड भेजता है, तो मैं डेटा कैसे पढ़ सकता हूं? उदाहरण के लिए, इस (जावा + Unirest) के लिए:

Unirest.post("/path/to/server") 
     .field("field1", "value2") 
     .field("field2", "value2"); 

संपादित करें: मैं बस response.POST["field1"] का उपयोग कर डेटा पढ़ सकते हैं, या मैं request.body साथ कुछ करने के लिए करना होगा?

संपादित करें 2: तो मैं बस एक शब्दकोश की तरह request.POST के समान वस्तु के रूप में उपयोग कर सकते हैं request.body?

+0

आप request.body में सभी डेटा – utkbansal

उत्तर

8

जहां तक ​​मैं यूनिरेस्ट से फ़ील्ड विधि को समझता हूं, वहां सामान्य application/x-www-form-urlencoded डेटा HTML फॉर्म की तरह उपयोग करता है। इसलिए आपको सुझाए गए response.POST["field1"] का उपयोग करने में सक्षम होना चाहिए।

4

docs से:

request.data अनुरोध शरीर के पार्स सामग्री देता है। यह मानक request.POST के समान और request.FILES विशेषताओं सिवाय इसके कि है:

  • यह फ़ाइल और गैर फ़ाइल आदानों सहित सभी पार्स सामग्री, भी शामिल है।
  • यह POST के अलावा अन्य HTTP विधियों की सामग्री पार्स, जिसका अर्थ है कि आप PUT और PATCH
    अनुरोधों की सामग्री का उपयोग कर सकते हैं समर्थन करता है।
  • यह केवल फॉर्म डेटा का समर्थन करने के बजाय, आरईएसटी फ्रेमवर्क के लचीले अनुरोध पार्सिंग का समर्थन करता है। उदाहरण के लिए आप आने वाले फॉर्म डेटा को संभालने के तरीके में आने वाले JSON डेटा को संभाल सकते हैं।

मैं बस response.POST["field1"] का उपयोग कर डेटा पढ़ सकते हैं, या मैं request.body साथ कुछ करने के लिए होगा?

तो मैं बस request.body का उपयोग किसी शब्द-जैसी वस्तु के समान से request.POST पर कर सकता हूं?

एक उदाहरण - एक create विधि से (viewsets):

user = dict(
       full_name=request.DATA['full_name'], 
       password=request.DATA['password'], 
       email=request.DATA['email'], 
       personal_number=request.DATA['personal_number'], 
       user_type=request.DATA['user_type'], 
       profile_id=request.DATA['profile_id'], 
       account_id=request.DATA['account_id'] 
      ) 

संपादित करें 1: संस्करण 3 में (नवीनतम) - request.DATArequest.data साथ प्रतिस्थापित किया गया:

user = dict(
        full_name=request.data['full_name'], 
        password=request.data['password'], 
        email=request.data['email'], 
        personal_number=request.data['personal_number'], 
        user_type=request.data['user_type'], 
        profile_id=request.data['profile_id'], 
        account_id=request.data['account_id'] 
       ) 
+2

'request.DATA' नए संस्करण में पदावनत और यह उनका कहना है के लिए' द्वारा request.data' – DhiaTN

+0

धन्यवाद बदल दिया जाता है, मैं नवीनतम संस्करण 3 छुआ है है - का उपयोग करते हुए 2.3.13 –

5

यदि आप जिस एपीआई के साथ बातचीत कर रहे हैं वह एक सिंपल डीजेगो क्लास आधारित दृश्य है, तो आप डेटा वें एक्सेस करते हैं किसी न किसी तरह request.body कुछ इस तरह:

class MyView(View): 
    def post(self, request): 
     field1 = request.body.get('field1') 
     field2 = request.body.get('field2') 
     ... # processing here 

मामले में आप Django बाकी ढांचे एपीआई का उपयोग कर रहे हैं, तो आप request.data के माध्यम से डेटा का उपयोग:

field1 = request.data.get('field1') 
field2 = request.data.get('field2') 

एनबी: है कि आप request.DATA इंटरनेट में कहीं इस्तेमाल किया मिल जाए यह भी सही है, लेकिन यह केवल डीआरएफ के पुराने संस्करण के लिए मान्य है, और इसे नए संस्करणों में request.data के पक्ष में बहिष्कृत किया गया है।