Django REST Framework:使用列表测试POST请求时出错

来自Puud的Eerik Sven

我有一个测试视图:

@api_view(['POST'])
@permission_classes([AllowAny])
@authentication_classes([])
def test_view(request):
    return Response(request.data)

它在urls.py以下位置注册

urlpatterns = [
    path('api/test/', test_view)
]

当我尝试[{"a": 1}, {"a": 2}]通过REST Frameworks UI手动进行POST时,一切正常。

但是,如果我为此编写测试,则会发生意外错误。这是测试

from rest_framework.test import APITestCase

class ViewTest(APITestCase):
    def test_it(self):
        response = self.client.post('/api/test/', [{"a": 1}, {"a": 2}])
        print(response)

产生以下错误:

Traceback (most recent call last):
  File "C:\development\HeedView\backend\clients\api\tests.py", line 13, in test_it
    response = self.client.post('/api/test/', [{"a":1}, {"a": 2}])
  File "C:\development\HeedView\venv\lib\site-packages\rest_framework\test.py", line 300, in post
    path, data=data, format=format, content_type=content_type, **extra)
  File "C:\development\HeedView\venv\lib\site-packages\rest_framework\test.py", line 212, in post
    data, content_type = self._encode_data(data, format, content_type)
  File "C:\development\HeedView\venv\lib\site-packages\rest_framework\test.py", line 184, in _encode_data
    ret = renderer.render(data)
  File "C:\development\HeedView\venv\lib\site-packages\rest_framework\renderers.py", line 921, in render
    return encode_multipart(self.BOUNDARY, data)
  File "C:\development\HeedView\venv\lib\site-packages\django\test\client.py", line 194, in encode_multipart
    for (key, value) in data.items():
AttributeError: 'list' object has no attribute 'items'

如何解释这种行为?

克鲁博

要传递json数据,您需要添加format='json'此测试有效:

from rest_framework.test import APITestCase

class ViewTest(APITestCase):
    def test_it(self):
        response = self.client.post('/api/test/', [{"a": "1"}, {"a": 2}], format='json')
        print(response.json())

或者,你原来的测试工作,如果你设置的默认格式settings.py

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

如果未指定格式:

REST框架APIClient扩展Django的现有客户端类。Client.post文档说明:

数据字典中的键值对用于提交POST数据。例如:

... client.post('/login/', {'name': 'fred', 'passwd': 'secret'})

... [测试]此POST数据:

name=fred&passwd=secret

您的原始测试返回错误,因为如果未指定格式,则Django需要字典,而不是列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Django Rest Framework中测试PUT请求

来自分类Dev

如何从 Django Rest Framework 接收 POST 请求?

来自分类Dev

使用传递参数并从rest_framework请求JSON的Django的test client post方法创建单元测试

来自分类Dev

Django Rest Framework and JSONField

来自分类Dev

Django Rest Framework API

来自分类Dev

Django Rest Framework的ModuleNotFoundError

来自分类Dev

在Django REST Framework中何处更改POST请求的响应

来自分类Dev

如何在Django REST Framework中设置POST请求的权限?

来自分类Dev

Django Rest Framework序列化在发布请求时失败

来自分类Dev

测试Django Rest Framework时创建超链接关系

来自分类Dev

使用JWT令牌在Django Rest Framework中对POST请求的未经授权的响应

来自分类Dev

每个用户请求的Django Rest Framework指标

来自分类Dev

Django Rest Framework JWT 400错误请求

来自分类Dev

在 Django REST Framework 中更新/放置请求

来自分类Dev

向 Django Rest Framework 发送 PATCH 请求

来自分类Dev

Django Rest Framework-测试中的AssertionError

来自分类Dev

Django Rest Framework测试类错误

来自分类Dev

使用请求库将图像上传到Django Rest Framework

来自分类Dev

如何使用Django REST API验证android用户POST请求?

来自分类Dev

“此字段是必需的。” 使用Django REST Framework使用POST发送JSON时

来自分类Dev

Django Rest Framework,Relations POST选项名称

来自分类Dev

Django Rest Framework,在POST上返回405

来自分类Dev

发布请求Django REST框架

来自分类Dev

Ajax 请求 django rest 框架

来自分类Dev

Django Rest 框架请求验证

来自分类Dev

Python Django REST API测试

来自分类Dev

保存/POST django-rest-framework 时使用相关字段的值

来自分类Dev

Django Rest Framework URL模式

来自分类Dev

Django Rest Framework API权限

Related 相关文章

  1. 1

    在Django Rest Framework中测试PUT请求

  2. 2

    如何从 Django Rest Framework 接收 POST 请求?

  3. 3

    使用传递参数并从rest_framework请求JSON的Django的test client post方法创建单元测试

  4. 4

    Django Rest Framework and JSONField

  5. 5

    Django Rest Framework API

  6. 6

    Django Rest Framework的ModuleNotFoundError

  7. 7

    在Django REST Framework中何处更改POST请求的响应

  8. 8

    如何在Django REST Framework中设置POST请求的权限?

  9. 9

    Django Rest Framework序列化在发布请求时失败

  10. 10

    测试Django Rest Framework时创建超链接关系

  11. 11

    使用JWT令牌在Django Rest Framework中对POST请求的未经授权的响应

  12. 12

    每个用户请求的Django Rest Framework指标

  13. 13

    Django Rest Framework JWT 400错误请求

  14. 14

    在 Django REST Framework 中更新/放置请求

  15. 15

    向 Django Rest Framework 发送 PATCH 请求

  16. 16

    Django Rest Framework-测试中的AssertionError

  17. 17

    Django Rest Framework测试类错误

  18. 18

    使用请求库将图像上传到Django Rest Framework

  19. 19

    如何使用Django REST API验证android用户POST请求?

  20. 20

    “此字段是必需的。” 使用Django REST Framework使用POST发送JSON时

  21. 21

    Django Rest Framework,Relations POST选项名称

  22. 22

    Django Rest Framework,在POST上返回405

  23. 23

    发布请求Django REST框架

  24. 24

    Ajax 请求 django rest 框架

  25. 25

    Django Rest 框架请求验证

  26. 26

    Python Django REST API测试

  27. 27

    保存/POST django-rest-framework 时使用相关字段的值

  28. 28

    Django Rest Framework URL模式

  29. 29

    Django Rest Framework API权限

热门标签

归档