【问题标题】:modify request before validation在验证之前修改请求
【发布时间】:2015-01-11 13:22:10
【问题描述】:

我有一个注册表:

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() 使用 request.form['join_date'] 值返回 false,因此我必须先将日期字段转换为公历日期。

我想如果我可以在将 request.form 传递给 addUserForm() 之前无论如何修改它,那么我的 form.validate() 将不会返回 false。

但我不能,因为它是一个 ImmutableMultiDict。 我想知道是否可以制作一个不可变的 request.form 副本或任何其他方式在验证之前修改请求。

【问题讨论】:

    标签: python validation flask wtforms


    【解决方案1】:

    我发现我不必修改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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-16
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2011-05-03
      • 1970-01-01
      • 2018-11-27
      相关资源
      最近更新 更多