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

Flask中用变量作为session键为何显示不符?

Flask会话键名打印问题解决

问题场景

我编写了如下Flask路由处理函数,用于接收页面表单数据并存入session:

@app.route("/process_page_data/<page>", methods=["POST"])
def process_page_data(page):

    print(f"\n process {page} data... \n")

    session[f"{page}"] = list(request.form.items())
    print(f"\n{session[page]=}")

    return "Hello World"

终端输出内容:

process page1 data...


session[page]=[('q1', '1'), ('q2', '1'), ('q3', '1'), ('q4', '1'), ('q5', '1'), ('q6', '1'), ('q7', '1'), ('q8', '1'), ('q9', '1'), ('q10', '1'), ('q11', '1'), ('q12', '1'), ('q13', '1'), ('q14', '1'), ('q15', '1')]

我期望输出里的会话键显示为session['page1'],但实际显示的是session[page],找不到问题原因。

问题原因

这是Python f-string的特性导致的:{session[page]=}这种写法属于表达式格式化,它会原样输出表达式的结构,仅计算表达式的值。这里的page被当成了表达式的一部分,不会被替换为变量的实际值page1。

解决方案

要让输出显示变量page的实际值作为键名,需要手动将变量插入到输出文本中,修改打印语句即可:

@app.route("/process_page_data/<page>", methods=["POST"])
def process_page_data(page):

    print(f"\n process {page} data... \n")

    session[page] = list(request.form.items())  # 可简化f"{page}"为page,效果一致
    print(f"\nsession['{page}']={session[page]}")

    return "Hello World"

修改后的终端输出:

process page1 data...


session['page1']=[('q1', '1'), ('q2', '1'), ('q3', '1'), ('q4', '1'), ('q5', '1'), ('q6', '1'), ('q7', '1'), ('q8', '1'), ('q9', '1'), ('q10', '1'), ('q11', '1'), ('q12', '1'), ('q13', '1'), ('q14', '1'), ('q15', '1')]

说明:

  • 把{session[page]=}改为session['{page}']={session[page]},这样{page}会被替换为变量的实际值,同时用单引号包裹,符合期望的格式。
  • 存入session时,session[f"{page}"]可以简化为session[page],因为路由参数page本身就是字符串类型,直接作为键名即可。

内容的提问来源于stack exchange,提问作者Sammyul Haque

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:07:43