我正在尝试找到一种方法来从烧瓶应用程序的函数中更新字典(全局)。我想在这样的字典中存储有关创建帐户的用户的信息。
user {
'key': {'key1':'value1', 'key2':'value2'}
}
但我似乎无法从函数内更新字典或列表。我已经尝试了两种
更新方法user['key']={'key1':'value1', 'key2':'value2'}
,
user.update({'key': {'key1':'value1', 'key2':'value2'}
但它不起作用。
这是这部分的完整代码。
channel_list = []
users = {}
@app.route("/", methods=["GET", "POST"])
def index():
username = request.form.get("username")
firstname = request.form.get("firstname")
lastname = request.form.get("lastname")
if request.method == "GET":
if session.get("user_name"):
user_name = session.get("user_name")
get_user = users[user_name]
render_template("profile.html", user_name=get_user, users=users)
else:
return render_template("index.html")
if request.method == "POST":
session["user_name"] = username
newuser = {username: {"username": username, "firstname": firstname, "lastname": lastname}}
users.update(newuser)
get_user = users[username]
return render_template("profile.html", user=get_user, users=users)
@app.route("/signin", methods=["GET", "POST"])
def signin():
username = request.form.get("username")
if request.method == "GET":
if session.get("user_name"):
user_name = session.get("user_name")
get_user = users[user_name]
render_template("profile.html", user=get_user, users=users)
else:
return render_template("signin.html")
if request.method == "POST":
session["user_name"] = username
get_user = users[username]
return render_template("profile.html", user=get_user, users=users)
return render_template("signin.html")
我已经通过在纯 python 中尝试这个问题找到了问题,在没有先运行该函数的情况下,我也无法更新 dict。但是,我如何在烧瓶中运行每个单独的函数(例如,index() 或 signin()),因为我认为这是问题所在?我认为这应该由 app.run() 处理,但它不起作用。
if __name__ == "__main__":
app.run()
socketio.run(app)
我每次都收到“KeyError”,因为字典中没有插入任何内容,因此没有任何内容可供选择或访问。
我试图避免使用数据库,我真的很想弄清楚这一点,我不知道我做错了什么。该代码在烧瓶应用程序之外运行得非常好,这就是它令人沮丧的原因。