如何使用django.test.Client设置multipart/form-data部分的标题?

jam*_*her 6 python django multipartform-data django-testing

每一个部分一个在multipart/form-data文档可以有自己的标题,例如部分可以有一个标题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

Mar*_*rts 4

  1. Django 测试套件声称它将始终使用application/octet-stream文件头。但这实际上并非如此,因为encode_file所使用的函数实际上试图猜测文件的实际 mimetype。
  2. 这引出了第二个问题的答案:在尝试猜测 mimetype 之前,该函数会查找content_type文件上的属性。您应该能够将其设置为您喜欢的任何内容,从而覆盖Content-Type.