python - 将对象或对象数组发布到 API

标签 python arrays django rest django-rest-framework

我想要一个 REST API 端点,我可以在其中发布 json 对象或 json 对象数组。

我设法通过重新定义 ModelViewSet 的创建方法来做到这一点:

def create(self, request, *args, **kwargs):

        serializer = self.get_serializer(data=request.DATA, many=False)
        if serializer.is_valid():
            serializer.save()
            headers = self.get_success_headers(serializer.data)
            return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
        else:
            serializer = self.get_serializer(data=request.DATA, many=True)
            if serializer.is_valid():
                serializer.save()
                headers = self.get_success_headers(serializer.data)
                return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我使用序列化器中的 is_valid() 来了解数据是否包含对象或数组(许多设置为 True 或 False),但因此我失去了用于其他目的(如字段验证)的序列化器验证。

是否有更好的方法来实现这种行为?

我应该创建另一个具有另一个 url 的函数以便能够发布对象数组吗?支持这两种操作的 REST 方式是什么?

最佳答案

Django REST Framework 默认情况下不支持批量对象创建,但有一些软件包添加了对其的支持,例如 Django REST Framework Bulk .

可以做成work with routers稍作修改。这应该可以让您做您正在寻找的事情。

because of that I lose the serializer validation for other purposes like field validations.

这是因为您没有传递序列化器上下文,而通用 View 会自动传递序列化器上下文。

关于python - 将对象或对象数组发布到 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830873/

相关文章:

python - Django 中 DateTimeInput 的显示和输入相同的日期时间格式

python - 控制对 UpdateView 中页面的访问

python - 为什么 python 调试器在使用 Pycharm 时总是会超时等待 113 上的响应?

javascript - .filter 遍历数组

java - 如何通过 soap 网络服务 (XML) 传递图像的字节数组并在 Android 设备上解码此字节数组以将其转换回图像

java - 如何将整数的小映射表示为数组?

python - Windows 上的 GeoDjango : Try setting GDAL_LIBRARY_PATH in your settings

python - 当输入选择时什么也不会发生

python - 列表字典的笛卡尔积 - 带排序

python - '角色'对象没有属性 '__name__'