我目前正在嘗試使用運行到Django REST框架的multipart/form-data來獲取POST請求。我已經通過交互式API屏幕成功運行了一些測試請求,這些屏幕很好地工作。然後,我嘗試將這些轉換爲使用基於非會話的身份驗證策略,並且一直存在錯誤。我已經發送的請求的形式爲:任何想法,爲什麼我不能發佈到這個Django REST API?
POST /api/logs/ HTTP/1.1
Host: host:8080
Connection: keep-alive
Content-Length: 258
Accept: application/json
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryTOhRsMbL8ak9EMQB
Authorization: Token -token-
------WebKitFormBoundaryx6ThtBDZxZNUCkKl
Content-Disposition: form-data; name="SubmittedAt"
2014-01-23T10:39:00
------WebKitFormBoundaryx6ThtBDZxZNUCkKl
Content-Disposition: form-data; name="Device"
CheeseDevice
------WebKitFormBoundaryx6ThtBDZxZNUCkKl--
可悲的是,結果是(因爲我已經運行的所有請求):
{"Device": ["This field is required."], "SubmittedAt": ["This field is required."], "LogFile": ["This field is required."]}
有趣的是,我已經能夠通過對端點發送JSON的塊,他們正在接受符合市場預期,如:
POST /api/logs/ HTTP/1.1
Content-Type: application/json
Host: host:8080
Connection: keep-alive
Content-Length: 35
Accept: application/json
Authorization: Token -token-
{
"Device": "CheeseDevice"
}
返回:
{"SubmittedAt": ["This field is required."], "LogFile": ["This field is required."]}
正如預期的那樣 - 它實際上接受Device參數,並且僅在丟失的項目上引發錯誤。我會切換到使用JSON,但可惜無法上傳文件...
在此先感謝您的幫助!
編輯:
進一步的調查(即:編寫返回請求的數據顯示,request.DATA是沒有得到填充,由於某種原因,鑑於方法方法我使用調試如下:
def test_create(self, request, pk=None):
return Response(request.DATA)
編輯2:
即使進一步調查(以及丟棄代碼塊爲用於調試的框架),表示該REQ uests在_perform_form_overloading中被捕獲,並且從不碰到MultiPartParser。不知道爲什麼會發生這種情況,但我會嘗試進一步追蹤。
感謝您的想法。我試圖排除這兩個到目前爲止 - 多部分主體(和內容類型頭)從API瀏覽器的「HTML表單」部分生成的請求中拉出,所以應該是有效的,並且response.parsers列表包含MultiPartParser對象(位於0x7fd9d4272a10>處的
tr00st