【问题标题】:Django REST framework FileField PUT TestcaseDjango REST 框架 FileField PUT 测试用例
【发布时间】: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


    【解决方案1】:

    我发现 Django 的 django.test.Client 类不支持“PUT”方法的问题。相反,REST 框架提供了类rest_framework.test.APIClient,它支持 PUT(和 PATCH 等)。

    client.put() 函数现在需要填写一些不同的内容(我无法让它与 SimpleUploadedFile 一起使用),如下所述:https://fodra.github.io/2017/05/31/testing-django-rest-api-with-image-field.html

    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2015-10-19
    • 2013-02-18
    • 2017-11-17
    • 2015-03-29
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多