Python Flask代码执行if(name != session['name'])时报KeyError: 'name'如何解决
错误原因
- 触发
KeyError: 'name'是因为当前请求的session中没有存储name键,说明发起POST请求的用户未完成登录,session中没有写入对应的用户身份信息 - 额外风险:现有代码仅在GET分支用了通用异常捕获,POST分支无任何异常处理,即使session正常,若请求路径中的
name不存在于followers字典的键中,也会触发新的KeyError
修复方案
首先在所有需要读取session["name"]的逻辑前添加登录状态校验,同时给POST分支补充异常捕获、优化文件操作逻辑,修复后代码如下:
import json from flask import session, request, render_template, redirect # 你的原有视图函数逻辑 def user_page(name): if request.method == "GET": try: return render_template("user.html", name=name, bio=accounts[name]["bio"], follower=len(followers[name])) except: return 'incorrect username, <a href=/users>go back</a>.' else: # 新增登录校验 if "name" not in session: return redirect('/login') # 替换为你的实际登录页地址 # 新增用户名校验,避免followers中无对应键 if name not in followers: return 'incorrect username, <a href=/users>go back</a>.' print(name) if name != session["name"]: if session["name"] not in followers[name]: followers[name].append(session["name"]) else: followers[name].remove(session["name"]) # 用with上下文管理器优化文件写入,避免资源泄漏 with open("database_followers.json", "w") as f: f.write(json.dumps(followers)) return redirect(f'/users/{name}')
内容的提问来源于stack exchange,提问作者Hexagon96
相关产品推荐
相关产品推荐

