2017-03-02 60 views
2

我使用djangorestframework用下面的代碼:request.META不包含頭

class RegistrationView(APIView): 
    def post(self, request, format=None): 
     print self.request.META.get('API_KEY') 

,並返回None(其他頭如Content-TypeUser-Agent都OK)。

但是,這頭肯定是在請求存在(這關鍵是本地數據庫而已,所以它的確定它貼在這裏):

Sniffer

爲什麼?

回答

5

問題與請求標頭中的下劃線有關。

設置頁眉爲API-KEY(使用連字符,而不是下劃線),你可以使用

request.META.get('HTTP_API_KEY') 

這樣做的原因行爲是一些服務器忽略下劃線捕捉到它。

看到這個相關的問題Why underscores are forbidden in HTTP header names

1

在META中,任何自定義標題都預置有HTTP_關鍵字。

所以,你可以嘗試訪問的頭就像

request.META.get('HTTP_API_KEY') 
+0

嗯,不起作用。這是request.META內容:http://pastebin.com/GFRVyv4H – arts777

0

有時預處理框架,如光油緩存,被設置爲丟棄在請求中找到的任何自定義標題。也許這樣的事情是在你的服務器上完成的?

+0

這是本地開發服務器(嵌入在Django)。 – arts777

0

因爲您正在使用基於令牌和基於會話的身份驗證。我假定你正在通過瀏覽器進行測試,在這種情況下,你使用會話進行身份驗證,然後通過cookie實際獲得該會話,然後反向選擇用戶並從中獲取該令牌。

雖然,嘗試使用Curl或任何REST客戶端進行測試。打印出request.META - 第一把鑰匙將是HTTP_AUTHORIZATION