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

如何在Flask与Jinja中检查Session是否包含指定值?及代码异常解决

Flask Session 匹配失败问题解决

先修复代码语法错误

  • /add/<string: name> 中参数名与冒号间的空格需删除,改为 <string:name>,否则Flask无法正确解析路由参数。
  • /list 路由装饰器缺少闭合括号,修正为 @app.route("/list")。

初始化Session中的列表

首次访问/add时,session["list"]尚未创建,直接调用append会触发KeyError。修改add函数:

@app.route("/add/<string:name>")
def add(name):
    if "list" not in session:
        session["list"] = []
    session["list"].append(name)
    # 修改session内的可变对象后,必须标记已修改才能让Flask保存变更
    session.modified = True
    return "Successful"

修正数据库查询结果的访问方式

默认cursor.fetchone()返回元组而非对象,data.name会报错,可二选一解决:

  1. 使用索引访问:例如name是查询结果的第2列,就用data[1];
  2. 改用DictCursor让结果返回字典:
from flask_mysqldb import MySQLdb

@app.route("/list")
def list():
    cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
    query = "Select * From data where id=1"
    cursor.execute(query)
    data = cursor.fetchone()
    return render_template("list.html", data=data)

对应模板也要改为键名访问:

{% if data["name"] in session["list"] %}
There is
{% else %}
None
{% endif %}

检查值的类型与大小写一致性

确认数据库取出的data["name"]和session列表中的元素为同一类型(比如都是字符串),且大小写完全匹配——例如数据库存"Alice"、session里是"alice"会导致匹配失败。

打印调试确认实际值

在list函数中添加打印语句,直接查看真实值:

@app.route("/list")
def list():
    # ... 其他代码
    print(session.get("list", []))
    print(data.get("name"))
    return render_template("list.html", data=data)

通过控制台输出可直观排查匹配失败的原因。

内容的提问来源于stack exchange,提问作者Mert Cahit Yiğit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:01:15