2

我想在我的視圖上測試我的更新方法。該視圖是從drf獲取的模型視圖。要更新,我需要發送放入請求。由於這不總是被支持,所以有兩種方法可以告訴服務器我正在發出一個請求,第一種不適合我的需求是使用一個額外的字段來形成_method,並將其設置爲put。由於我需要發佈json數據,因此我需要使用第二種方法,即使用X-HTTP-Method-Override標題。Django測試客戶端方法覆蓋頭

要發佈我的數據在測試用例我使用下面的代碼:

header = {'X_HTTP_METHOD_OVERRIDE': 'PUT'} 
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header) 

但不幸的是,結果我得到的是{'detail':'Method POST not allowed.'}。我使用插件(Postman)測試了服務器的行爲,其中我也指定了X-HTTP-Method-Override標頭。沒有例外。我現在需要知道如何正確地將頭部傳遞給django測試客戶端,否則測試會在這裏變得非常煩人。

回答

5

您需要指定標頭爲'HTTP_X_HTTP_METHOD_OVERRIDE'而不是'X_HTTP_METHOD_OVERRIDE',即在標頭的開頭添加HTTP_

header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'} 
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header) 

從該請求中的Django documentation:

HTTP頭通過轉換 所有字符爲大寫,用下劃線 和添加HTTP_前綴名更換任何連字符轉換爲META鍵。因此,例如,名爲X-Bender的標頭 將映射到METAHTTP_X_BENDER

+1

感謝您的文檔鏈接!原因的答案。 – Iwan1993