2015-02-05 81 views
9

我發送POST請求我的API POST請求自定義頁眉使用Django休息框架方面:獲取與Django的REST框架

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,我會得到預期的回覆。

What使用django rest框架在我的發佈請求上獲得自定義標頭的方法是什麼?

回答

20

請求的元數據屬性的名稱是大寫:

print request.META 

你的頭將作爲:

request.META['HTTP_X_MYHEADER'] 

或者:

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

Quote from the documentation

將請求中的HTTP標頭轉換爲META鍵,方法是將所有字符轉換爲大寫,用下劃線替換任何連字符並將名稱前綴加上HTTP_。因此,例如,名爲X-Bender的標題將被映射到METAHTTP_X_BENDER

+0

對不起,就像一個失蹤(;),我在這個兩個小時......也許,你知道如何使用curl請求api時可以看到錯誤細節嗎?當我使用curl發送發佈請求時,我只能在我的控制檯上看到類似[05/Feb/2015 08:40:39]「POST/api/update_log/HTTP/1.1」500 78112的答案,但我無法查看錯誤細節。謝謝你,原諒我的疏忽。 – 2015-02-05 14:16:15

+1

將'curl'的輸出重定向到文件,然後在瀏覽器中打開該文件。 'curl ... http://127.0.0.1:8000/api/update_log/> error.html' – catavaran 2015-02-05 14:36:13

0

如果你提供一個有效的頭信息,並從後端的信息然後按照這些

client-name='ABCKD' 

那麼你得到的職位,客戶信息或獲取函數以下這個 -

request.META['HTTP_CLIENT_NAME'] 

它會給你輸出'ABCKD'。

記住,無論你在你的請求頭信息提供了有效的變量名,Django的將其轉換大寫和前綴在這裏「HTTP_」 將客戶名稱轉換爲CLIENT_NAME和前綴HTTP_。 所以最終輸出是HTTP_CLIENT_NAME