2011-02-14 14 views
43

मैं अपने नए django प्रोजेक्ट के लिए रीस्टफुल पैटर्न का पालन करना चाहता हूं, और मैं जानना चाहता हूं कि पैरामीटर कब एक पुट/डिलीट अनुरोध किया जाता है।Django - PUT/DELETE अनुरोध पर संग्रहीत पैराम कहां हैं?

जहां तक ​​मुझे पता है, मुझे केवल अनुरोध में & पोस्ट क्वेरी क्वेरी देखें, कोई अन्य नहीं। क्या Django अनुरोध के संबंध में एक नया पुट या डिलीट QueryDict जोड़ रहा है, या यह क्वेरी या पोस्ट QueryDict करने के लिए पैरामीटर जोड़ता है?

आपकी मदद के लिए धन्यवाद।

उत्तर

38

मुझे लगता है कि तुम क्या कह रहे हैं आप इस तरह एक विधि हो सकता है, यदि:

def restaction(request, id): 
    if request.method == "PUT": 
     someparam = request.PUT["somekey"] 

जवाब नहीं नहीं कर सकता है, तो आप। Django PUT, विकल्प और DELETE अनुरोधों के लिए ऐसे शब्दकोश नहीं बनाते हैं, तर्क here समझाया जा रहा है।

आपके लिए इसे सारांशित करने के लिए, आरईएसटी की अवधारणा यह है कि आपके द्वारा एक्सचेंज किया जाने वाला डेटा मूल्यों के लिए कुंजी के सरल मानचित्र से कहीं अधिक जटिल हो सकता है। उदाहरण के लिए, एक छवि पॉटिंग, या जेसन का उपयोग करना। एक ढांचा आपको कई तरीकों से नहीं जान सकता है, जिन्हें आप डेटा भेजना चाहते हैं, इसलिए यह स्पष्ट बात है - चलो आप उस बिट को संभालें। this question का उत्तर भी देखें जहां एक ही प्रतिक्रिया दी जाती है।

अब, आपको डेटा कहां मिल रहा है? खैर, docs के अनुसार, django 1.2 विशेषताएं request.raw_post_data। एक सिर के रूप में, it looks like django 1.3 will supportrequest.read() यानी फ़ाइल-जैसी अर्थशास्त्र।

+1

Django 1.4 के रूप में, '' 'request.raw_post_data'' नाम दिया गया है' अनुरोध।शरीर '', और 'raw_post_data'' Django 1.6 में हटा दिया गया था। – user85461

+0

दरअसल आप Django हैंडल को पुट कर सकते हैं और जैसे चाहें अनुरोध हटा सकते हैं। यहां आप एक [संभावित दृष्टिकोण] (https://baxeico.wordpress.com/2014/06/25/put-and-delete-http-requests-with-django-and-jquery/) ढूंढ सकते हैं। – baxeico

12

निनफिगर का जवाब सही है। हालांकि, इसके लिए कामकाज हैं।

यदि आप Django प्रोजेक्ट के लिए एक आरईएसटी स्टाइल एपीआई लिख रहे हैं, तो मैं दृढ़ता से सुझाव देता हूं कि आप tastypie का उपयोग करें। आप अपने आप को बहुत समय बचाएंगे और अपने एपीआई के लिए एक और संरचित रूप की गारंटी देंगे। आप यह भी देख सकते हैं कि यह कैसे स्वादिष्ट है (पुट तक पहुंचें और डेटा हटाएं)।

+0

लिंक के लिए धन्यवाद, मैं एक नज़र डालेगा! :) –

+0

मेरे द्वारा +1, अच्छी सलाह। –

5

आप django-piston's code में एक PUT विधि के लिए एक QueryDict होने का एक उदाहरण (coerce_put_post विधि देखें)

74

मैं Django v1.5 का उपयोग कर रहा देख सकते हैं। और मैं मुख्य रूप से समस्या को हल करने QueryDict का उपयोग करें:

from django.http import QueryDict 
put = QueryDict(request.body) 
description = put.get('description') 

और * .coffee में

$.ajax 
     url: "/policy/#{policyId}/description/" 
     type: "PUT" 
     data: 
     description: value 
     success: (data) -> 
     alert data.body 
     fail: (data) -> 
     alert "fail" 

आप here जाना अधिक जानकारी प्राप्त कर सकते हैं। और मुझे उम्मीद है कि यह आपकी मदद कर सकता है। शुभकामनाएँ :)

+4

Django के आधुनिक संस्करणों के लिए, यह स्वीकार्य उत्तर से कहीं अधिक उपयोगी है। – CmdrMoozy

+0

जब मैं डालता हूं = QueryDict (request.body) यह प्रिंट करता है: ऐसा लगता है कि यह उस डेटा को सहेज रहा है जिसे मैं एक कुंजी के रूप में भेज रहा हूं। –

+0

कुछ "request.META.get ('REQUEST_METHOD', '' ') जैसा होगा। ऊपरी()" हमें' PUT 'या' DELETE 'नहीं देगा जैसा कि https://gist.github.com/g00fy-/1161423? –

1

एक समस्या थी कि मैं request से मल्टीपार्ट/फॉर्म-डेटा को पार्स करने का तरीका हल नहीं कर सका। QueryDict(request.body) मेरी मदद नहीं की।

तो, मुझे मेरे लिए एक समाधान मिला है। मैं इस का उपयोग शुरू किया:

from django.http.multipartparser import MultiPartParser

आप की तरह request से डेटा प्राप्त कर सकते हैं:

MultiPartParser(request.META, request, request.upload_handlers).parse() 
+1

यह Django1.11 पर काम करता है। धन्यवाद। –

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