РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
416 of 643 menu

Метод user_loader

Метод user_loader применяется к объекту LoginManager и регистрирует функцию-загрузчик пользователя. Flask-Login хранит в сессии идентификатор пользователя и при каждом запросе вызывает эту функцию, чтобы восстановить объект пользователя. Первым параметром передаётся функция, принимающая идентификатор пользователя и возвращающая объект пользователя либо None, если пользователь не найден.

Синтаксис

@login_manager.user_loader def load_user(user_id): pass

Пример

Давайте зарегистрируем загрузчик, который возвращает объект пользователя по его идентификатору:

from flask import Flask from flask_login import LoginManager, UserMixin app = Flask(__name__) app.secret_key = 'abcde' login_manager = LoginManager() login_manager.init_app(app) class User(UserMixin): def __init__(self, id): self.id = id users = { '1': User('1'), '2': User('2') } @login_manager.user_loader def load_user(user_id): return users.get(user_id)

Теперь при каждом запросе Flask-Login будет брать идентификатор из сессии и передавать его в функцию load_user, чтобы восстановить объект пользователя.

Пример

Давайте проверим, как загрузчик возвращает пользователя и что происходит, если идентификатор не найден:

from flask import Flask from flask_login import LoginManager, UserMixin app = Flask(__name__) app.secret_key = 'abcde' login_manager = LoginManager() login_manager.init_app(app) class User(UserMixin): def __init__(self, id): self.id = id users = { '1': User('1'), '2': User('2') } @login_manager.user_loader def load_user(user_id): return users.get(user_id) with app.app_context(): res = load_user('1') print(res.id) res = load_user('3') print(res)

Результат выполнения кода:

"1" None

Пример

Давайте используем загрузчик вместе с функцией login_user для входа пользователя и сохранения его идентификатора в сессии:

from flask import Flask from flask_login import LoginManager, UserMixin, login_user app = Flask(__name__) app.secret_key = 'abcde' login_manager = LoginManager() login_manager.init_app(app) class User(UserMixin): def __init__(self, id): self.id = id users = { '1': User('1'), '2': User('2') } @login_manager.user_loader def load_user(user_id): return users.get(user_id) @app.route('/login') def login(): user = users.get('1') login_user(user) return 'hello'

После входа пользователя его идентификатор сохраняется в сессии, а загрузчик восстанавливает объект пользователя при следующих запросах.

Смотрите также

  • класс LoginManager,
    который управляет аутентификацией во Flask
  • метод request_loader,
    который загружает пользователя из данных запроса
  • функцию login_user,
    которая выполняет вход пользователя
  • класс UserMixin,
    который добавляет пользователю стандартные методы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить