Переменная current_user
Переменная current_user доступна внутри контекста запроса
и хранит объект пользователя, выполняющего текущий запрос.
Если пользователь не авторизован, переменная содержит
анонимного пользователя, у которого is_authenticated
равно False. Переменная не принимает параметров:
она автоматически заполняется Flask-Login на основе данных сессии
или загрузчика пользователя user_loader.
Обычно current_user применяется в шаблонах и в обработчиках
маршрутов для проверки прав доступа и вывода данных пользователя.
Синтаксис
from flask_login import current_user
current_user
Переменная импортируется из модуля flask_login
и работает только внутри контекста запроса.
Пример
Давайте создадим простое приложение с Flask-Login и выведем имя текущего пользователя на главной странице:
from flask import Flask, render_template
from flask_login import LoginManager, UserMixin, login_user, current_user
app = Flask(__name__)
app.secret_key = 'abcde'
login_manager = LoginManager()
login_manager.init_app(app)
class User(UserMixin):
def __init__(self, id, name):
self.id = id
self.name = name
users = {'1': User('1', 'user')}
@login_manager.user_loader
def load_user(user_id):
return users.get(user_id)
@app.route('/')
def index():
if current_user.is_authenticated:
return current_user.name
return 'hello'
После входа пользователя результат выполнения кода:
user
Для неавторизованного пользователя результат выполнения кода:
hello
Пример
Давайте используем current_user внутри Jinja-шаблона,
чтобы вывести имя пользователя:
from flask import Flask, render_template
from flask_login import LoginManager, UserMixin, login_user, current_user
app = Flask(__name__)
app.secret_key = 'abcde'
login_manager = LoginManager()
login_manager.init_app(app)
class User(UserMixin):
def __init__(self, id, name):
self.id = id
self.name = name
users = {'1': User('1', 'user')}
@login_manager.user_loader
def load_user(user_id):
return users.get(user_id)
@app.route('/')
def index():
login_user(users['1'])
return render_template('index.html')
Теперь напишем сам шаблон:
<p>{{ current_user.name }}</p>
Результат выполнения кода:
<p>user</p>
Смотрите также
-
функцию
login_user,
которая выполняет вход пользователя -
функцию
logout_user,
которая выполняет выход пользователя -
класс
UserMixin,
который добавляет пользователю нужные методы -
декоратор
login_required,
который ограничивает доступ к маршруту