Проверить и обработать ошибку, чтобы передать клиенту значимый статус

Я использую graphene-django вместо rest api(рамки отдыха). Я работаю над регистрацией пользователей. В остальной среде валидация выполнялась в части сериализаторов, но при использовании 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'])

одним из примеров может быть проверка, если пользователь с электронной почтой уже существует

1 ответ

Самый простой способ выглядит так:

    @staticmethod
    def mutate(root, info, email, password, password_repeat):
        errors = []
        if password == password_repeat:
            errors.append('password_is_not_matching')

        if User.objects.filter(email=email).exists():
            errors.append('email_is_already_registred')

        if len(errors) == 0:
            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=errors)

Но проблемы могут возникнуть, если вы будете делать много таких проверок - код становится более сложным и становится труднее понять, что на самом деле делают мутации.

Для получения дополнительной информации прочтите эту статью.

Другие вопросы по тегам