@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 메서드가 요청되면
form.validate_on_submit()
이 확인되지 않으므로 반환됩니다. post 메소드를 사용하는 경우 페이지 이름 값이 비어 있습니다. Form을 제출할 때 검증에 성공하면 이름은 제출된 값과 동일합니다. form.name.data의 값을 지워야 하는 이유는 이를 지우지 않으면 제출 후 반환된 페이지의 양식은 이전에 작성한 내용을 유지합니다. 두 번째 문단은 검증을 거쳐 리다이렉트 페이지를 사용하였기 때문에 명확하지 않아도 상관없으며 세션과 관련이 없습니다