验证前修改请求
modify request before validation
我有一张注册表:
class AddUserForm(Form):
email = StringField(_('Email'), [validators.DataRequired()])
password = PasswordField('Password', [validators.DataRequired()])
forename = StringField('Forename', [validators.DataRequired()])
surname = StringField('Surname', [validators.DataRequired()])
address = TextAreaField('Address', [validators.DataRequired()])
join_date = DateField('Join Date', [validators.DataRequired()])
并像这样查看:
@app.route('user/add/', methods=['GET', 'POST'])
def add():
# here I need to modify request.form
form = AddUserForm(request.form)
if request.method == 'POST' and form.validate():
user = User(email=request.form['email'])
form.populate_obj(user)
user.set_password(request.form['password'])
db.session.add(user)
db.session.commit()
return jsonify({'message': 'thanks for registration',
'status': 'success'})
return render_template('user/form.html', form=form)
问题出在我尝试验证此表单时。
form.validate() returns false with request.form['join_date'] value 所以我必须先将日期字段转换为公历日期。
我想如果我能在将 request.form 传递给 addUserForm() 之前修改它,那么我的 form.validate() 就不会 return false。
但我不能,因为它是一个 ImmutableMultiDict。
我想知道是否可以制作一份 request.form 的副本,它不是不可变的或任何其他在验证之前修改请求的方法。
我发现不用修改request.form。我可以修改我传递给它 request.form 的表格。
from jdatetime import datetime
def add():
form = AddUserForm(request.form)
# can modify the form with form.<NAME>.data
form.phone.data = datetime.strptime(request.form['join_date'], '%Y/%m/%d').date().togregorian()
# and validate it then
if request.method == 'POST' and form.validate():
# do stuff
我有一张注册表:
class AddUserForm(Form):
email = StringField(_('Email'), [validators.DataRequired()])
password = PasswordField('Password', [validators.DataRequired()])
forename = StringField('Forename', [validators.DataRequired()])
surname = StringField('Surname', [validators.DataRequired()])
address = TextAreaField('Address', [validators.DataRequired()])
join_date = DateField('Join Date', [validators.DataRequired()])
并像这样查看:
@app.route('user/add/', methods=['GET', 'POST'])
def add():
# here I need to modify request.form
form = AddUserForm(request.form)
if request.method == 'POST' and form.validate():
user = User(email=request.form['email'])
form.populate_obj(user)
user.set_password(request.form['password'])
db.session.add(user)
db.session.commit()
return jsonify({'message': 'thanks for registration',
'status': 'success'})
return render_template('user/form.html', form=form)
问题出在我尝试验证此表单时。
form.validate() returns false with request.form['join_date'] value 所以我必须先将日期字段转换为公历日期。
我想如果我能在将 request.form 传递给 addUserForm() 之前修改它,那么我的 form.validate() 就不会 return false。
但我不能,因为它是一个 ImmutableMultiDict。 我想知道是否可以制作一份 request.form 的副本,它不是不可变的或任何其他在验证之前修改请求的方法。
我发现不用修改request.form。我可以修改我传递给它 request.form 的表格。
from jdatetime import datetime
def add():
form = AddUserForm(request.form)
# can modify the form with form.<NAME>.data
form.phone.data = datetime.strptime(request.form['join_date'], '%Y/%m/%d').date().togregorian()
# and validate it then
if request.method == 'POST' and form.validate():
# do stuff