使用Flask开发登录站点如何在模板中显示已登录用户的用户名
问题原因
- 登录验证通过后,仅标记了登录状态,未将用户名存入session,后续请求无法获取对应用户信息
- 渲染profile.html模板时,没有将username变量传入模板,模板中的占位符无法匹配到对应值
修复步骤
步骤1:登录成功后存储用户名到session
修改index路由中登录成功的逻辑,添加存储用户名的代码:
if info['email'] == username and info['password'] == password: session['loginsuccess'] = True # 新增:把数据库中存储的用户名存入session session['username'] = info['username'] return redirect(url_for('profile'))
步骤2:渲染模板时传入username参数
修改profile路由的返回逻辑,将session中存储的username传入模板:
@app.route('/new/profile') def profile(): # 优化:用get方法取值避免未登录时访问抛出KeyError if session.get('loginsuccess') == True: return render_template("profile.html", username=session.get('username')) # 新增:未登录时跳转到登录页 return redirect(url_for('index'))
可选方案:模板直接读取session
你也可以不用修改视图函数,直接把模板中的{{username}}替换为{{session.username}},Flask模板默认可以直接访问session对象。
额外优化建议
- 你当前的代码直接明文存储用户密码,存在严重安全风险,建议使用bcrypt等库对密码做哈希加密后再存储
- 目前profile路由未做未登录访问的拦截,直接访问/new/profile路径会抛出KeyError,建议按上面的示例用get方法取值并补充未登录跳转逻辑
- 代码中引入的cryptography相关代码目前未实际使用,不需要可以删除
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

