class NameForm(FlaskForm):
name=StringField('What is your name?', validators=[Required()])
submit=SubmitField('Submit')
@app.route('/', methods=['GET', 'POST'])
def index():
form=NameForm()
# print(form.name.data)
if form.validate_on_submit():
session['name']=form.name.data
# form.name.data=''
# print('post')
return redirect(url_for('index'))
# print('get')
return render_template('index.html', form=form, name=session.get('name'))
据我所知,无论我是否发送post或get请求,index()
函数将始终运行这行代码form=NameForm()
,其中form
将被分配给一个新值
但是,当我点击submit时,发送到服务器的post请求会采用表单数据,即使在form
函数的第一行已将index()
分配给新值时,该数据仍会保留
正如您所注意到的,每次调用
index
都会导致创建一个新的form
实例我不确定我是否理解了这个问题,所以我在猜测一个可能的困惑来源
在封面下,
FlaskForm
子类知道flask请求,如果是POST、PUT、PATCH或DELETE,则将从请求填充实例。所以当index
做如果是GET,
form
将为空,如果是POST,form
将包含提交的数据如果您想知道这种意识是如何工作的,请参阅https://github.com/lepture/flask-wtf/blob/master/flask_wtf/form.py#L54,其中
flask-wtf
覆盖wtforms
中的方法以提供特定于烧瓶的行为相关问题 更多 >
编程相关推荐