我正在使用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})
答案 0 :(得分:0)
return jsonify({'Success': 0, 'Errors': 'invalid form'})
添加您找到的任何特定验证错误。然后,应用程序可以显示它们。
并且使用一个简单的except Exception
子句是个坏主意 - 你至少记录了这个,对吗?
您可以使用Flask WTF进行所需的验证