Flask学习(二):Flash案例代码修改
程序员文章站
2024-02-03 20:28:16
...
案例中的原始代码为:
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
old_name = session.get('name')
if old_name is not None and old_name != form.name.data:
flash('Looks like you have changed your name!')
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))
但是我使用该代码重新打开一个浏览器,保证原先session已经不存在,然后打开主页之后submit之后会直接抛出异常
说name不存在,查看我们代码是取得session[‘name’],所以我直接输出session这个dic的所有key,
print({x for x in session.keys()})
当第一次输出的时候之后一个{‘csrf_token’},也就是说这时候session这个dic里面没有name这个key,所以直接去获取值得话就会报错。因此,需要修改代码,进来的时候需要判断session里面是否有name,如果没有的话则不能取old_name,需要先设置session[‘name’]的值,然后old_name再去取值。代码如下:
def index():
name = None
form = NameForm()
if form.validate_on_submit():
if 'name' in session:
old_name = session['name']
if old_name is not None and old_name != form.name.data:
flash('Look like you have changed your name')
elif old_name is None:
session['name'] = form.name.data
else:
session['name'] = form.name.data
old_name = session['name']
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))