Flask学习(二):Flash案例代码修改

来源:互联网 发布:java中的集合类 编辑:程序博客网 时间:2024/05/16 19:19

案例中的原始代码为:

@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'))