Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 验证并处理错误以将有意义的状态传递回客户端_Python_Django_Graphene Python_Graphene Django - Fatal编程技术网

Python 验证并处理错误以将有意义的状态传递回客户端

Python 验证并处理错误以将有意义的状态传递回客户端,python,django,graphene-python,graphene-django,Python,Django,Graphene Python,Graphene Django,我使用的是graphenedjango而不是restapi(rest框架)。我正在进行用户注册。在rest框架中,验证是在序列化程序部分完成的,但是当使用graphene时,如何验证和处理将有意义的状态传递给客户端的错误 这是注册码 class Register(graphene.Mutation): class Arguments: email = graphene.String(required=True) password = graphene.St

我使用的是
graphenedjango
而不是
restapi
(rest框架)。我正在进行用户注册。在rest框架中,验证是在序列化程序部分完成的,但是当使用
graphene
时,如何验证和处理将有意义的状态传递给客户端的错误

这是注册码

class Register(graphene.Mutation):
    class Arguments:
        email = graphene.String(required=True)
        password = graphene.String(required=True)
        password_repeat = graphene.String(required=True)

    user = graphene.Field(UserQuery)
    success = graphene.Boolean()
    errors = graphene.List(graphene.String)

    @staticmethod
    def mutate(self, info, email, password, password_repeat):
        if password == password_repeat:
            try:
                user = User.objects.create(email=email)
                user.set_password(password)
                user.is_active = False
                user.full_clean()
                user.save()
                return Register(success=True, user=user)
            except ValidationError as e:
                import pdb
                pdb.set_trace()
                return Register(success=False, errors=[e])
        return Register(success=False, errors=['password', 'password is not matching'])

一个例子是验证电子邮件用户是否已经存在。最简单的方法如下所示:

@staticmethod
def mutate(根目录、信息、电子邮件、密码、密码\u重复):
错误=[]
如果password==password\u重复:
错误。追加('密码不匹配')
如果User.objects.filter(email=email).exists():
错误。追加('电子邮件已注册')
如果len(错误)==0:
尝试:
user=user.objects.create(email=email)
user.set_密码(password)
user.is_active=False
user.full_clean()
user.save()
返回寄存器(success=True,user=user)
除ValidationError为e外:
导入pdb
pdb.set_trace()
返回寄存器(成功=错误,错误=[e])
返回寄存器(成功=错误,错误=错误)

但是如果你做了很多这样的检查,可能会出现问题——代码变得更复杂,更难弄清楚突变到底做了什么


有关更多信息,请阅读。

“但如果您进行大量此类检查,可能会出现问题-”。对此,建议的解决方案是什么?我没有找到太多关于石墨烯验证的资源,所以我认为最好的解决方案可能也会帮助很多其他开发人员。这是一个很长的话题,所以这里有一个关于这篇文章的链接。谢谢,这肯定会帮助所有遇到这类问题的人。