2015-01-11 114 views
0

之前我有一个登记表:修改请求验证

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

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

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

回答

0

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