[英]Flask, flask_login, pytest: How do I set flask_login's current_user?
[英]flask_login, How to get current_user from a new thread?
我是flask_login库的新手。 在我的代码库中,用户登录后,我可以从flask_login
库的current_user
获取当前用户信息。 简化的测试代码如下:
from threading import Thread
from flask_login import current_user
def test():
print("current_user = ", current_user) # None
worker = Thread(target=test)
worker.start()
print("current_user = ", current_user) # <XXX.auth.view.User object at 0x119b2b250>
所以我很困惑,为什么我无法从单独的线程获取当前用户信息,即使我在第一个print
语句之前再次故意导入。
谢谢。
current_user
是一个线程局部值 - 它将在每个线程中表现为一个单独的变量。 如果您在其他地方需要它,您必须在线程之间传递它。
也许你的电话会变成:
from threading import Thread
from flask_login import current_user
user = current_user
def test(user):
print("current_user = ", user)
worker = Thread(target=test, args=(user,))
worker.start()
print("current_user = ", user)
来自flask_login
源的相关行:
current_user = LocalProxy(lambda: _get_user())
关于werkzeug从werkzeug文档中实现本地人的相关讨论:
Werkzeug提供了自己的本地数据存储实现,称为werkzeug.local。 此方法为线程本地提供了类似的功能,但也适用于greenlet。
https://werkzeug.palletsprojects.com/en/0.15.x/local/#werkzeug.local.LocalProxy
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.