Django 自定义成功和失败的响应

标签 django django-rest-framework

我想为我的序列化程序之一的成功和失败创建自定义响应。现在我只有成功的创建功能

我希望输出像默认输出 + 我的另外 2 条消息一样显示。

提示消息和状态。

例如json数据的输出:如果成功:

promptmsg = "您已成功创建xxx"
状态='200'

如果失败

promptmsg = "您创建xxx失败"
状态='400'

这是我的观点的代码

class ScheduleViewSet(viewsets.ModelViewSet):
    permission_classes = [AllowAny]
    queryset = Schedule.objects.all()
    serializer_class = ScheduleSerializer

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        if not serializer.is_valid(raise_exception=False):
            return Response({"promptmsg": "You have failed to register an account",
                             "status": "400"}, status=HTTP_400_BAD_REQUEST)

        response = super(ScheduleViewSet, self).create(request, *args, **kwargs)
        response.data['promptmsg'] = 'You have successfully create a book'
        response.data['statuscode'] = '200'
        return response

    def update(self, request, *args, **kwargs):
        partial = kwargs.pop('partial', False)
        instance = self.get_object()
        serializer = self.get_serializer(instance, data=request.data, partial=partial)
        if not serializer.is_valid(raise_exception=False):
            return Response({"promptmsg": "You have failed to register an account",
                             "statuscode": "400"}, status=HTTP_400_BAD_REQUEST)

        # serializer.is_valid(raise_exception=True)
        # self.perform_update(serializer)
        response = super(ScheduleViewSet, self).update(request, *args, **kwargs)
        response.data['promptmsg'] = 'You have successfully create a book'
        response.data['statuscode'] = '200'
        return response

如您所见,如果失败,它只会返回提示消息和状态。

如果成功将显示默认响应+提示消息+状态。

那么我该如何更改它?

最佳答案

如果我理解正确的话,您需要将错误详细信息添加到自定义错误响应中,以防序列化失败?在这种情况下,您可以使用 serializer.errors 属性:

if not serializer.is_valid(raise_exception=False):
    errors_details = serializer.errors
    errors_details["promptmsg"] = "You have failed to register an account"
    errors_details["status"] = "400"
    return Response(errors_details, status=HTTP_400_BAD_REQUEST)

关于Django 自定义成功和失败的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48898732/

相关文章:

python - Django Rest Framework View 返回一个空对象

Django model.save() 不使用 loaddata

javascript - 单击以从选择框中进行选择

django - 将 REDIS 与 Tastypie 结合使用

python - 类型错误 : not enough arguments for format string python mysql

使用工厂男孩时,Django 模型对象没有属性 '_default_manager'

python - 有效的 UUID 不是有效的 UUID

python - Django View 集没有属性 'get_extra_actions'

python - CSRF 豁免失败 - APIView csrf django rest framework

python - 在 Django 中注册后如何进行电子邮件确认?