将Flask验证错误转换为JSON

时间:2015-08-20 17:17:09

标签: python flask

我正在使用Flask作为我的后端来通过iOS应用程序创建用户帐户。我可以成功创建帐户,但我不太确定如何在用户名/电子邮件已被使用时返回我得到的验证错误。我认为当表单得到验证时,它应该返回一个可能的错误字典,这些错误会转换为JSON并发送回应用程序但不太确定如何处理它。

//form.py
class RegistrationForm(Form):
    email = StringField('Email', validators=[Required()])
    username = StringField('Username', validators=[Required()])
    password_hash = StringField('Password', validators=[Required()])

    def validate_email(self, field):
        if User.query.filter_by(email=field.data).first():
            print("Email already registered.")
            raise ValidationError('Email already registered.')

    def validate_username(self, field):
        if User.query.filter_by(username=field.data).first():
            print("Username already in use.")
            errorDict={'username': 'Username already in use.'}
            raise ValidationError('Username already in use.')

编辑: 我修改了寄存器功能来测试各种情况。这绝对不是一个很好的方法,但它暂时阻止我。

//userRegistration.py
@auth.route('/register', methods=['POST'])
def register():
    try:
        data = MultiDict(mapping=request.json)
        form = RegistrationForm(data)

        if form.validate():
            user = User.register_fromJSON(request.json)
            db.session.add(user)
            db.session.commit()
            return jsonify({'success': 1})
        else:
            if form.email.errors and form.username.errors:
                print('case1')
                 return jsonify({'emailError': form.email.errors[0], 'usernameError': form.username.errors[0]})
            elif form.email.errors and not form.username.errors:
                print('case2')
                return jsonify({'emailError': form.email.errors[0]})
            elif form.username.errors and not form.email.errors:
                print('case3')
                return jsonify({'usernameError': form.username.errors[0]})

    except Exception:
        return jsonify({'Success': 0})

1 个答案:

答案 0 :(得分:0)

return jsonify({'Success': 0, 'Errors': 'invalid form'})

添加您找到的任何特定验证错误。然后,应用程序可以显示它们。

并且使用一个简单的except Exception子句是个坏主意 - 你至少记录了这个,对吗?

您可以使用Flask WTF进行所需的验证