【发布时间】:2018-09-17 12:10:01
【问题描述】:
我有一个模型,其中包含一个可能不是空白的 FileField。在为此模型创建测试时,我遇到了在使用 PUT 进行测试时出现错误的问题,而在进行 POST 时完全相同。
作为视图,我只是将generics.ListCreateAPIView 用于 POST 目标,generics.RetrieveUpdateDestroyAPIView 用于 PUT 目标,在浏览器中使用 API 时两者都可以正常工作。
POST 和 PUT 的有效负载创建如下:
uploaded_file = SimpleUploadedFile('TestCode4.c', "Testcode", content_type='text/plain')
self.valid_payload = {
'name': 'TestValid',
'test_file': uploaded_file
}
那么工作的 POST 测试如下所示:
client = Client()
response = client.post(
reverse('code-list'),
self.valid_payload,
format='json'
)
还有 PUT:
client = Client()
response = client.put(
reverse('code-detail', kwargs={'pk': 1}),
self.valid_payload,
format='json'
)
POST 返回 204 并创建一个新对象,而 PUT 返回 415 并出现以下错误:
{u'detail': u'Unsupported media type "application/octet-stream" in request.'}
我不确定这里出了什么问题,似乎 post 和 put 都以相同的方式传递 SimpleUploadedFile 数据,尽管 put 它以某种方式变成了八位字节流。
【问题讨论】:
标签: django-rest-framework filefield django-unittest