You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask如何在URL中显示当前登录用户用户名及相关报错解决

问题1:Jinja模板user未定义报错

layout.html属于全局共用模板,只有部分页面渲染时传入了user变量,没有传参的页面访问时自然会触发未定义错误。你已经接入了Flask-Login,可以直接使用框架提供的全局current_user对象,不需要依赖页面传递的user变量。

修改layout.html的链接代码如下,且要把这段链接代码放在{% if current_user.is_authenticated %}判断块内,避免未登录用户访问时报错:

<a href="{{url_for('settings', Users_username = current_user.username )}}" target="_blank" rel="noopener noreferrer">Settings</a>

问题2:BaseQuery对象无username属性报错

Users.query.filter_by(username=Users_username)返回的是SQLAlchemy的查询对象,不是实际的用户记录,需要调用.first()获取匹配到的第一条用户数据:

@app.route("/settings/<string:Users_username>" , methods=["GET", "POST"])
def settings(Users_username):
    # 加.first()获取实际用户对象,无匹配结果时返回None
    user = Users.query.filter_by(username=Users_username).first()
    # 可追加判断,用户不存在时直接返回404
    if not user:
        abort(404)
    return render_template("settings.html", user=user )

问题3:404错误排查

修改完上述两处后如果还有404问题,检查两点:

  • 访问URL中的用户名和数据库存储的用户名大小写完全匹配,路由默认的string转换器是大小写敏感的
  • 确认没有其他前缀和/settings/重叠的路由优先匹配了请求

可选优化

为了避免用户手动修改URL访问其他人的设置页,可以追加权限判断:

# 获取到user对象后追加判断
if user.id != current_user.id:
    # 无权访问时跳转到用户自己的设置页
    return redirect(url_for('settings', Users_username=current_user.username))

内容的提问来源于stack exchange,提问作者Talal Iqbal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:57:04