Flask 变量似乎不同步

问题描述 投票:0回答:1

我正在使用 Flask 构建一个网络服务器,我需要能够更改特定用户的会话变量。为此,我创建了一个变量 (

foo
),在其中存储会话变量中需要更改的数据。我还使用
app.before_request
装饰器创建了一个函数,这就是我检查
foo
的地方,以查看当前
session variable

中是否需要更改任何内容 这是这个想法:

foo = {}
@app.route("/admin", methods=["GET","POST"])
def some_admin_route():
    ...
    foo[username] = {'key': 'value'}

@app.before_request
def before_request_func():
    if session['username'] in foo:
        for key in foo:
            session[key] = foo[key]

这在我的本地 PC 上完美运行,但是当在我的 VPS(使用 uwsgi)上测试时,奇怪的事情发生了。如果我刷新多次,有时

foo
变量为空,有时不是,当有两个键/值对时,有时两个都在变量中,有时只有一个,有时两者都没有。
我也尝试过使用
global foo
但没有任何改变。

flask uwsgi
1个回答
0
投票

我找到了使用 Redis 的解决方案。这是一个基本示例,它使用

hset
存储数据,
hexists
检查
username
是否存在,使用
hget
检索数据。

redis = Redis(host='localhost', port=6379, db=0)
@app.route("/admin", methods=["GET","POST"])
def some_admin_route():
    ...
    redis.hset("foo", username, json.dumps({'key': 'value'}))

@app.before_request
def before_request_func():
    if redis.hexists("foo", session[username]):
        bar = json.loads(redis.hget("foo", session[username]))
        for key in bar:
            session[key] = bar[key]
        redis.hdel("foo", session[username])

© www.soinside.com 2019 - 2024. All rights reserved.