【问题标题】:Get the user id in flask获取烧瓶中的用户ID
【发布时间】:2018-11-01 01:37:07
【问题描述】:

注意。与Get current user id in Flask 不重复。

我使用flask_login 和flask,因此要获取当前ID,它唯一的flask_login.current_user.id。但是当我想在我的 app.py 中使用命令创建变量时会出现问题:

...
curr_user = flask_login.current_user.id

def function_a(curr_user):
    os.mkdir(path + '/' + curr_user)
    return 'Path created successfully'
...

也就是说:

AttributeError: 'NoneType' 对象没有属性 'get_id'

只有在运行的时候(不需要调用,唯一的赋值给curr_user做问题)

尝试调用带有变量的函数作为 flask_login.current_user.id 和 Ive 相同。

我认为问题在于我通常无法获取用户的 ID(在 app.py 运行实例中),而这需要上下文。所以,我尝试了:

with app.test_request_context():

在分配之前,我只为用户和访客获得了 None。

编辑。我知道我能做到:

def function_a():
    os.mkdir(path+'/'+flask_login.current_user.id)
    return 'Path created successfully'

但这只是一个例子,真正需要的是将值分配给具有上下文的非局部变量。

【问题讨论】:

  • 你从哪里调用function_a?看起来您已脱离应用上下文。
  • 好吧,我在 app.py 中赋值,但 function_a 来自另一个文件(decorators.py)。您能帮我了解如何在上下文中使用装饰器吗?如果可能的话,尽量不要在装饰器上导入 app.py(同时 bcs app 导入装饰器)。谢谢你

标签: python flask login flask-login


【解决方案1】:

您可以使用“g”将 user_id 保存在应用上下文中:

from flask import g

if current_user.is_authenticated():
        g.user = current_user.get_id()

但最简单的解决方案是将用户 ID 传递给您正在调用的函数。

# call this function from inside the app/request context
def function_a(user_id):
    os.mkdir(os.path.join(path,user_id))
    return 'Path created successfully'

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 2020-08-02
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    相关资源
    最近更新 更多