【问题标题】:Django Rest Framework APITestCase client requires format parameterDjango Rest Framework APITestCase 客户端需要格式参数
【发布时间】:2017-12-02 01:34:00
【问题描述】:

在尝试测试用@api_view 修饰的 api 时,我收到的格式与手动测试时的响应不匹配。我期望以下格式:

{
    "field": "string value"
}

但是当我尝试发布(来自测试)时,我收到错误,因为格式似乎是这样的:

{
    "field": ["string_value"]
}

重现这个问题:

class Tests(rest_framework.test.APITestCase):
    def test_api(self): 
         ...
         response = self.client.post(url, data)
         ...

【问题讨论】:

  • response = self.client.post(url, data, format='json')
  • 这就是答案,我还有其他项目不需要添加格式,为什么会这样?
  • 很可能是您的 DRF 解析器设置。不看你的观点真的说不出来。
  • 查看答案以获取更具体的查看地点

标签: django testing django-rest-framework


【解决方案1】:

您还可以在settings.py 中设置默认格式:

REST_FRAMEWORK = {
    'TEST_REQUEST_DEFAULT_FORMAT': 'json',
    ...
}

...这意味着您不必为每个请求设置它。

【讨论】:

    【解决方案2】:

    response = self.client.post(url, data, format='json')

    确保将此添加到您的代码中。 format='json' 部分很重要,因为我假设您的端点已设置为接收它。您的端点不够聪明,无法识别您发送它的格式,但它可以识别它是否是您设置的格式:) 您可以通过添加 parser_class=(JSONParser,))@parser_classes((JSONParser,)) 到您的APIView/@apiview.

    检查您的 settings.py 文件中的这一行。

    REST_FRAMEWORK = {
        'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
        )
    }
    

    http://www.django-rest-framework.org/api-guide/parsers/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 2014-09-05
      • 2018-09-20
      • 2019-04-04
      • 2014-05-15
      相关资源
      最近更新 更多