2015-01-11 7 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 с запросом.form ['join_date'], поэтому мне нужно сначала преобразовать поле даты в gregorian.

Я думал, что если бы я мог каким-либо образом изменить request.form, прежде чем передать его в addUserForm(), то мой 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 
Смежные вопросы