簡體   English   中英

如何使用django.test.Client設置multipart / form-data部分的標題?

[英]How can I set the headers of multipart/form-data parts with django.test.Client?

multipart/form-data文檔中的每個部分都可以有自己的標題 ,例如,section可以有一個標題Content-Type: text/plain 例如,這些部分可以是來自Web表單的上載文件。

Django的UploadedFile類的文檔中 ,我讀到了

UploadedFile.content_type

隨文件一起上傳的內容類型標題(例如text / plain或application / pdf)。 與用戶提供的任何數據一樣,您不應相信上傳的文件實際上是此類型。 您仍然需要驗證該文件是否包含內容類型標頭聲明的內容 - “信任但驗證”。

好的,我應該根據聲明的內容類型驗證文件。 所以當然,現在我需要編寫一些測試來測試我的服務器是否確實正確驗證了內容類型。 一個這樣的測試是使用content-type: multipart/form-data向我的服務器發出請求,其中至少有一個部分具有與其內容類型不一致的內容。

我怎樣才能做到這一點? django.test.Client類有一個post方法 ,可以發送類型為multipart/form-data請求。 請求主體的多個部分作為字典傳遞給方法。 這個字典的鍵是字符串,值是字符串或“文件對象”。

我希望了解:

  1. 如何將此字典轉換為multipart/form-data請求體。 每個部分的標題是什么?
  2. 如何在每個部件上手動設置任意標頭。 例如,我如何手動指定標題Content-Type: text/plain
  1. Django測試套件聲稱它將始終使用application/octet-stream頭文件。 但事實並非如此,因為使用的encode_file函數實際上試圖猜測文件的實際mimetype。
  2. 這導致您對第二個問題的回答:在嘗試猜測mimetype之前,該函數在文件中查找 content_type屬性。 應該能夠將其設置為您喜歡的任何Content-Type ,從而覆蓋Content-Type

Client類繼承自django.test.client.RequestFactorysrc )並且有效地你可以在Clientpost定義中看到它基本上是對super的調用,所以你可以引用RequestFactory post定義 默認情況下,這反過來要求_encode_data它采用encode_multipart ,其中,因為你已經注意到,規定“多/表單數據”。

在這里,您可以看到為每個部分指定了一些標題(例如, Content-Disposition ),但是我沒有看到為每個部分指定Content-Type標題(或任何特定標題)的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM