在这种情况下,我不建议将数据提交为JSON,因为这会使问题变得复杂。只需使用您要提交的参数和文件进行POST
请求即可。 Django REST Framework将在无需您将其序列化为JSON的情况下处理它。
我曾经为上传文件到API端点编写过一个测试,看起来像这样:
def test_post_photo(self):
"""
Test trying to add a photo
"""
album = AlbumFactory(owner=self.user)
self.client.login(username=self.user.username, password='password')
image = Image.new('RGB', (100, 100))
tmp_file = tempfile.NamedTemporaryFile(suffix='.jpg')
image.save(tmp_file)
with open(tmp_file.name, 'rb') as data:
response = self.client.post(reverse('photo-list'), {'album': 'http://testserver/api/albums/' + album.pk, 'image': data}, format='multipart')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
在这种情况下,我使用了
tempfile
模块来存储使用 Pillow 生成的图像。在示例中使用的
with
语法允许您相对轻松地传递请求正文中文件的内容。
基于此,类似以下内容应该适用于您的用例:
image = Image.new('RGBA', size=(50, 50), color=(155, 0, 0))
file = tempfile.NamedTemporaryFile(suffix='.png')
image.save(file)
with open(file.name, 'rb') as data:
return self.client.post("/api/images/", {"image": data, "item": 1}, format='multipart')
顺便提一下,根据您的使用情况,接受图像数据作为base 64编码字符串可能更加方便。
json.dumps
调用吗?在我的 Django 项目中,我只是使用测试客户端将数据作为字典进行提交。 - Brobin