Получить идентификатор пользователя в колбе - PullRequest
0 голосов
/ 01 ноября 2018

Примечание. Не дублируется из Получить текущий идентификатор пользователя в Flask .

Я использую flask_login и flask, поэтому для получения текущего идентификатора используется только 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 одинаково.

Думаю, проблема в том, что я не могу получить идентификатор пользователя в целом (в запущенном экземпляре app.py), и это требует контекста. Итак, я попробовал:

with app.test_request_context():

перед назначением, и я получил только None для пользователей и гостей.

Edit. Я знаю, я могу просто сделать:

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

Но это был только пример, действительно нужно присваивать значение нелокальной переменной с контекстом.

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете сохранить user_id в контексте приложения, используя «g»:

from flask import g

if current_user.is_authenticated():
        g.user = current_user.get_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'
...