【问题标题】:How to return incomplete body errors in django?如何在 django 中返回不完整的正文错误?
【发布时间】:2021-11-18 20:34:40
【问题描述】:
class OrderViewSet(viewsets.ViewSet):
def list(self, request):
    orders = Order.objects.all()
    return Response({
      "code": "success",
      "orders": orders,
    })

def create(self, request):
    comment = request.data["comment"]
    product_id = request.data["product_id"]
    order = Order(comment=comment, product_id=product_id)
    order.save()
    return Response({
      "code": "success",
    })

如果用户在请求正文中未提供 product_id,我想返回错误:

"code": "invalid-request",
"details": {
  "product_id": {
    "type": "required",
    "message": "Product id is required",
   }
 }

此外,如果未提供注释,则会出现 KeyError,但我不想在请求正文中强制注释。如果未提供并且仍然返回成功,如何将其设置为 ''? 谢谢

【问题讨论】:

    标签: json django rest


    【解决方案1】:

    您应该使用serializers 来实现输入数据验证和保存模型。请注意,下面的示例使用通用serializers.Serializer,但您可能希望使用serializers.ModelSerializer 来验证Order 数据,因为它也会处理创建模型。

    class OrderSerializer(serializers.Serializer):
        product_id = serializers.IntegerField()
        comment = serializers.CharField(required=False, default='')
    
    class OrderViewSet(viewsets.ViewSet):
        def list(self, request):
            orders = Order.objects.all()
            return Response({
              "code": "success",
              "orders": orders,
            })
    
        def create(self, request):
            serializer = OrderSerializer(data=request.data)
            if serializer.is_valid():
                order = Order(**serializer.validated_data)
                order.save()
                return Response({
                    "code": "success",
                })
            return Response({
                "code": "invalid-request",
                "details": {
                    error: {
                        "type": serializer.errors[error][0].code,
                        "message": serializer.errors[error][0]
                    } for error in serializer.errors}
            }, status=400)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2021-07-11
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多