@app.route('/', methods=['GET', 'POST'])
def index():
name = None
form = NameForm()
if form.validate_on_submit():
name = form.name.data
form.name.data = ''
return render_template('index.html', form=form, name=name)
在if语句中,这个form.name.data
被赋值给局部变量name且表单域的数据属性通过赋值为空字符串而被清除。
问题一:
在上述代码中,为什么需要清除form.name.data
?
问题二:
如下代码,为什么使用session的时候,就不需要清空form.name.data?
from flask import Flask, render_template, session, redirect, url_for
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))
フラスコにルートを追加するためにデコレーターを使用する場合は、http メソッドを決定する必要があります。
最初のコードでは、get メソッドであるか post メソッドであるかが明示的に判断されていないため、デフォルトは get メソッドです。get メソッドが要求された場合、
form.validate_on_submit()
は検証されないため、返されます。ページ名の値が空 (なし) の場合、post メソッドを使用してフォームを送信すると、検証に合格した場合、その名前は送信された値と同じになります。データをクリアしないと、ページ上のフォームの名前の値が以前に入力したままになるためです。 2 番目の段落は検証され、リダイレクト ページが使用されているため、セッションとは関係がなく、明確でなくても問題ありません