欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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之后会直接抛出异常Flask学习(二):Flash案例代码修改
说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'))
相关标签: flash