2015-01-11 6 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()는 request.form [ 'join_date'] 값에 false를 반환하므로 날짜 필드를 그레고리 안 날짜로 먼저 변환해야합니다.

addUserForm()에 전달하기 전에 request.form을 수정해도 my 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 
관련 문제