1
我使用Flask作爲後端,通過iOS應用程序創建用戶帳戶。我可以成功創建帳戶,但我不太確定我是如何返回驗證錯誤的,當用戶名/電子郵件已被使用時,我會收到驗證錯誤。我在想,當表單得到驗證時,它應該返回一個可能的錯誤字典,將其轉換爲JSON併發送回應用程序,但不太確定如何處理此問題。將Flask驗證錯誤轉換爲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})
我想我不知道我怎麼會收集所有驗證錯誤,這樣我可以將它們添加到jsonify。例外情況僅用於現在的日誌記錄。 – Brosef
已更新的答案。 – scytale
我看到他們通過執行self.username.errors.append將錯誤添加到列表中,但是一旦您要對錯誤進行json化,該列表可以從1個錯誤變爲4個錯誤。你會如何編寫jsonify行來解決1個錯誤的情況或者有多個錯誤的情況? – Brosef