2015-08-20 61 views
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}) 

回答

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

加入你發現任何具體的驗證錯誤。該應用程序可以顯示它們。

並且使用一個裸的except Exception子句是個不錯的主意 - 你至少要記錄這個,對吧?

可以使用Flask WTF做那種驗證你需要

+0

我想我不知道我怎麼會收集所有驗證錯誤,這樣我可以將它們添加到jsonify。例外情況僅用於現在的日誌記錄。 – Brosef

+0

已更新的答案。 – scytale

+0

我看到他們通過執行self.username.errors.append將錯誤添加到列表中,但是一旦您要對錯誤進行json化,該列表可以從1個錯誤變爲4個錯誤。你會如何編寫jsonify行來解決1個錯誤的情況或者有多個錯誤的情況? – Brosef