iOSアプリケーションからユーザー登録データを受信しています。wtformsに付属のバリデーターを使用して、電子メールとパスワードが受け入れ可能であることを確認したいと思います。ただし、ユーザーがiOSテキストフィールドからデータを入力しているため、フラスコフォームは使用していません。wtformsバリデーターで受信JSONデータをチェックすることは可能ですか?
@auth.route('/register', methods=['POST'])
def register():
try:
user = User.register_fromJSON(request.json)
email_success = validate_email(user)
username_success = validate_username(user)
if email_success == 1 and username_success == 1:
db.session.add(user)
db.session.commit()
return jsonify({'Success': 1})
else:
return jsonify({'Failure': 0})
except Exception:
return jsonify({'Failure': 0})
def validate_email(user):
if User.query.filter_by(email=user.email).first() == None:
return 1
else:
return 0
def validate_username(user):
if User.query.filter_by(username=user.username).first() == None:
return 1
else:
return 0
編集
登録フォームを作成しました:
class RegistrationForm(Form):
email = StringField('Email', validators=[Required(), Length(1,64), Email()])
username = StringField('Username', validators=[Required(), Length(1, 64), Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0, 'Usernames must have only letters, 'numbers, dots or underscores')])
password = PasswordField('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.")
raise ValidationError('Username already in use.')
登録機能が更新されました:
@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:
return jsonify({'Success': 2})
except Exception:
return jsonify({'Success': 3})
はい、これは完全に可能です-wtforms.Form
コンストラクターはMultiDict
同様のインターフェースを取ります(必要なgetlist
だけです)のでwerkzeug.datastructures.MultiDict
、JSONからのインスタンスを作成するだけです:
data = MultiDict(mapping=request.json)
form = YourForm(data)
if form.validate():
# Data is correct
(フィールド名が一致すると仮定して)そして物事はうまくいくでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加