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])
返回寄存器(成功=错误,错误=错误)
但是如果你做了很多这样的检查,可能会出现问题——代码变得更复杂,更难弄清楚突变到底做了什么
有关更多信息,请阅读。“但如果您进行大量此类检查,可能会出现问题-”。对此,建议的解决方案是什么?我没有找到太多关于石墨烯验证的资源,所以我认为最好的解决方案可能也会帮助很多其他开发人员。这是一个很长的话题,所以这里有一个关于这篇文章的链接。谢谢,这肯定会帮助所有遇到这类问题的人。