當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Django Client.post用法及代碼示例


本文介紹 django.test.Client.post 的用法。

聲明

post(path, data=None, content_type=MULTIPART_CONTENT, follow=False, secure=False, **extra)

對提供的 path 發出 POST 請求並返回 Response 對象,如下所述。

data 字典中的鍵值對用於提交 POST 數據。例如:

>>> c = Client()
>>> c.post('/login/', {'name': 'fred', 'passwd': 'secret'})

…將導致評估對此 URL 的 POST 請求:

/login/

…使用此 POST 數據:

name=fred&passwd=secret

如果您將 content_type 提供為 application/json ,則如果 data 是字典、列表或元組,則使用 json.dumps() 對其進行序列化。默認情況下,使用 DjangoJSONEncoder 執行序列化,並且可以通過向 Client 提供 json_encoder 參數來覆蓋。此序列化也發生在 put() patch() delete() 請求中。

如果您提供任何其他 content_type(例如,text/xml 用於 XML 有效負載),data 的內容將在 POST 請求中按原樣發送,使用 HTTP Content-Type 標頭中的 content_type

如果您沒有為 content_type 提供值,則 data 中的值將以 multipart/form-data 的內容類型傳輸。在這種情況下,data 中的鍵值對將被編碼為多部分消息並用於創建 POST 數據有效負載。

要為給定鍵提交多個值 - 例如,指定 <select multiple> 的選擇 - 將值作為所需鍵的列表或元組提供。例如,這個 data 的值將為名為 choices 的字段提交三個選定的值:

{'choices': ('a', 'b', 'd')}

提交文件是一種特殊情況。要發布文件,您隻需提供文件字段名稱作為鍵,並提供要上傳的文件的文件句柄作為值。例如:

>>> c = Client()
>>> with open('wishlist.doc', 'rb') as fp:
...     c.post('/customers/wishes/', {'name': 'fred', 'attachment': fp})

(此處的名稱attachment 不相關;使用您的file-processing 代碼期望的任何名稱。)

您還可以提供任何 file-like 對象(例如 StringIO BytesIO )作為文件句柄。如果您要上傳到 ImageField ,則該對象需要一個通過 validate_image_file_extension 驗證器的 name 屬性。例如:

>>> from io import BytesIO
>>> img = BytesIO(b'mybinarydata')
>>> img.name = 'myimage.jpg'

請注意,如果您希望對多個post() 調用使用相同的文件句柄,則需要手動重置帖子之間的文件指針。執行此操作的最簡單方法是在將文件提供給 post() 後手動關閉文件,如上所示。

您還應該確保以允許讀取數據的方式打開文件。如果您的文件包含圖像等二進製數據,這意味著您需要以rb(讀取二進製)模式打開文件。

extra 參數的作用與 Client.get() 相同。

如果您使用 POST 請求的 URL 包含編碼參數,則這些參數將在 request.GET 數據中可用。例如,如果您要提出請求:

>>> c.post('/login/?visitor=true', {'name': 'fred', 'passwd': 'secret'})

... 處理此請求的視圖可以詢問 request.POST 以檢索用戶名和密碼,並可以詢問 request.GET 以確定用戶是否是訪問者。

如果您將follow 設置為True,則客戶端將遵循任何重定向,並且將在包含中間url 和狀態代碼的元組的響應對象中設置redirect_chain 屬性。

如果將 secure 設置為 True,客戶端將模擬 HTTPS 請求。

相關用法


注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.test.Client.post。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。