gpt4 book ai didi

python - 在不使用表单的情况下使用 flask wtforms 验证器

转载 作者:太空狗 更新时间:2023-10-30 01:58:11 25 4
gpt4 key购买 nike

我正在从 iOS 应用程序接收用户注册数据,我想使用 wtforms 附带的验证器来确保电子邮件和密码是可接受的。但是,我没有使用 flask 表单,因为用户是从 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 的接口(interface) ( it just needs to have getlist ),所以你可以从你的 JSON 创建一个 werkzeug.datastructures.MultiDict 的实例:

data = MultiDict(mapping=request.json)
form = YourForm(data)
if form.validate():
# Data is correct

(假设字段名称匹配)一切都会正常工作

关于python - 在不使用表单的情况下使用 flask wtforms 验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32062097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com