我正在使用 django REST 框架构建一个 API。
为了测试这个 API,我正在使用 pytest 和测试客户端,如下所示:
def test_doesnt_find(self, client):
resp = client.post(self.url, data={'name': '123'})
assert resp.status_code == 404
或者
def test_doesnt_find(self, client):
resp = client.get(self.url, data={'name': '123'})
assert resp.status_code == 404
在使用 REST 框架的通用 GET、POST 和 DELETE 类时都可以工作(例如DestroyAPIView
,RetrieveUpdateAPIView
或仅APIView
使用 get 和 post 函数)
我遇到问题的地方是使用 PATCH 和 PUT 视图时。比如RetrieveUpdateAPIView
。在这里我突然不得不使用:
resp = client.patch(self.url, data="name=123", content_type='application/x-www-form-urlencoded')
或者
resp = client.patch(self.url, data=json.dumps({'name': '123'}), content_type='application/json')
如果我只是尝试像以前那样使用测试客户端,我会收到错误:
rest_framework.exceptions.UnsupportedMediaType: Unsupported media type "application/octet-stream" in request.
当我在 client.patch() 调用中指定 'application/json' 时:
rest_framework.exceptions.ParseError: JSON parse error - Expecting property name enclosed in double quotes: line 1 column 2 (char 1)`
谁能向我解释这种行为?由于 curl 简单地使用-X PATCH -d"name=123"
.