如何为django-graphene中的错误返回自定义JSON响应?

时间:2017-12-04 02:21:09

标签: django error-handling graphql mutation graphene-python

我正在学习使用django-graphene进行graphql目的。

对于变异,我所知道的是它会返回自己的错误信息。 假设我有一个令牌字段,并检查令牌字段是否错误,我只知道return None如何给前端提供null的查询结果而不是状态的自定义json响应和错误

我有这些代码

class ProductType(DjangoObjectType):
    class Meta:
        model = Product
        filter_fields = {'description': ['icontains']}
        interfaces = (graphene.relay.Node,)


class ProductInput(graphene.InputObjectType):
    token = graphene.String()
    title = graphene.String()
    barcode = graphene.String(required=True)


class CreateProduct(graphene.Mutation):
    class Arguments:
        product_input = ProductInput()

    product = graphene.Field(ProductType)

    def mutate(self, info, product_input=None):
        if not product_input.get('token'):
            return None  # instead of return None, I would like to return error code, status with message
        product = Product.objects.create(barcode=product_input.barcode, title=product_input.title)

        return CreateProduct(product=product)


class ProductMutation(graphene.ObjectType):
    create_product = CreateProduct.Field()

提前致谢

1 个答案:

答案 0 :(得分:1)

您可以抛出异常而不是'\0'。该例外将由石墨烯处理并作为错误传递。

例如,return None会产生类似

的回复
raise Exception('Error 123456')

输出JSON中存在{ "errors": [ { "message": "Error 123456'", "locations": [ { "line": 1, "column": 3 } ] } ], "data": { "product": null } } 可以触发前端错误处理。

请注意,一般情况下,传递给graphql的任何异常都将对外界可见,因此值得考虑所有石墨烯查询和变异异常的安全性后果。