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"
です。