2015-02-05 16 views
9

मैं अपने एपीआई के लिए एक पोस्ट अनुरोध भेज रहा साथ पोस्ट अनुरोध पर कस्टम हेडर हो रही Django बाकी ढांचे का उपयोग करके बनाया:Django बाकी ढांचे

curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/ 

मेरी बाकी ढांचे को देखते हुए, मैं अपने costum हैडर प्राप्त करना चाहते हैं, और यदि कस्टम हेडर किसी शर्त को पूरा करता है, तो मैं अपने पोस्ट डेटा का विश्लेषण करने के लिए आगे बढ़ूंगा।

class PostUpdateLogView(APIView): 
throttle_classes =() 
permission_classes =() 
parser_classes = (
    parsers.FormParser, 
    parsers.MultiPartParser, 
    parsers.JSONParser, 
) 

renderer_classes = (renderers.JSONRenderer,) 

def post(self, request): 
    print request.Meta 
    # Get custom header 
    # Validate custom header 
    # Proceed to analize post data 

    # Make response 
    content = { 
     'response': 'response', 
    } 

    return Response(content) 

मैं request.Meta तत्व पर अपने कस्टम हेडर खोजने की कोशिश कर रहा हूँ, लेकिन जब मैं request.Meta प्रिंट, मैं एक 500 त्रुटि मिलती है:

ठीक है, मेरे विचार की तरह लग रहा है। अगर मैं request.data प्रिंट करता हूं, तो मुझे अपेक्षित प्रतिक्रिया मिलती है।

¿django आराम ढांचे का उपयोग करके मेरे पोस्ट अनुरोध पर कस्टम हेडर प्राप्त करने का तरीका क्या है?

उत्तर

20

अनुरोध के मेटा डेटा विशेषता का नाम ऊपरी मामले में है:

request.META['HTTP_X_MYHEADER'] 

या::

request.META.get('HTTP_X_MYHEADER') # return `None` if no such header 

Quote from the documentation

print request.META 

आपका हेडर के रूप में उपलब्ध हो जाएगा:

अनुरोध में HTTP शीर्षलेख META कुंजी को सभी वर्णों को अपरकेस में परिवर्तित करके, अंडरस्कोर के साथ किसी भी हाइफ़न को प्रतिस्थापित करके और HTTP_ नाम के उपसर्ग को जोड़कर परिवर्तित कर दिया गया है। इसलिए, उदाहरण के लिए, X-Bender नामक एक हेडर को META कुंजी HTTP_X_BENDER पर मैप किया जाएगा।

+0

मुझे खेद है, एक लापता (;) की तरह, मैं इस पर दो घंटे था ... शायद, क्या आप जानते हैं कि जब मैं कर्ल का उपयोग करके एपीआई का अनुरोध करता हूं तो बग विस्तार कैसे देख सकता है? जब मैं कर्ल का उपयोग करके पोस्ट अनुरोध भेजता हूं, तो मैं केवल अपने कंसोल पर उत्तर देख सकता हूं जैसे कि [05/फरवरी/2015 08:40:39] "पोस्ट/एपीआई/अपडेट_लॉग/HTTP/1.1" 500 78112, लेकिन मैं नहीं कर सकता बग विवरण देखें। धन्यवाद और मेरी लापरवाही बहाना। –

+1

फ़ाइल में 'curl' के आउटपुट को रीडायरेक्ट करें और फिर ब्राउज़र में इस फ़ाइल को खोलें। 'curl ... http://127.0.0.1:8000/api/update_log/> error.html' – catavaran

0

आप एक वैध हेडर सूचना उपलब्ध कराने और बैकएंड से कि जानकारी मिलती है तो उन

client-name='ABCKD' 

का पालन करें तो आप पोस्ट में है कि ग्राहक जानकारी प्राप्त या समारोह मिलता है-

request.META['HTTP_CLIENT_NAME'] 
निम्नलिखित है

यह आपको आउटपुट 'एबीसीकेडी' देगा।

कि, जो कुछ भी वैध चर नाम आप अनुरोध में अपने शीर्ष लेख जानकारी में प्रदान करते हैं Django यह अपरकेस और 'HTTP_' यहाँ में यह क्लाइंट नाम HTTP_ साथ CLIENT_NAME और उपसर्ग के लिए परिवर्तित किया जाएगा के साथ उपसर्ग परिवर्तित याद है। तो अंतिम आउटपुट HTTP_CLIENT_NAME

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