欢迎访问宙启技术站
智能推送

透彻了解flask_login.current_user.name()方法并获取当前用户姓名

发布时间:2024-01-03 20:27:40

在 Flask Login 中,flask_login.current_user 是一个全局变量,可用于获取当前已登录用户的信息,其中包括用户名、ID、是否已验证等等。

flask_login.current_user 是一个代表当前登录用户的对象,它是实现了特定接口(UserMixin)的用户模型的实例。因此,可以直接通过 current_user 对象的属性和方法来获取用户的信息。

要获取当前用户的姓名,可以使用 current_user.name 属性。name 属性在用户模型中定义,表示用户的姓名。

下面是一个使用 Flask Login 获取当前用户姓名的例子:

from flask import Flask, render_template
from flask_login import LoginManager, login_user, logout_user, current_user

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'

# 初始化 Flask Login
login_manager = LoginManager()
login_manager.init_app(app)

# 定义用户模型
class User():
    def __init__(self, id, name):
        self.id = id
        self.name = name
    
    def get_id(self):
        return str(self.id)

# 模拟一个用户数据库
users = {
    '1': User('1', 'Alice'),
    '2': User('2', 'Bob'),
    '3': User('3', 'Charlie')
}

# 加载用户的回调函数
@login_manager.user_loader
def load_user(user_id):
    return users.get(user_id)

# 登录页面
@app.route('/login/<user_id>', methods=['GET'])
def login(user_id):
    user = users.get(user_id)
    if user:
        login_user(user)
        return 'Logged in as ' + current_user.name
    else:
        return 'User not found'

# 退出登录
@app.route('/logout', methods=['GET'])
def logout():
    logout_user()
    return 'Logged out'

# 保护的页面
@app.route('/protected', methods=['GET'])
def protected():
    if current_user.is_authenticated:
        return 'Hello, ' + current_user.name
    else:
        return 'Please log in'

if __name__ == '__main__':
    app.run(debug=True)

在上述代码中,首先定义了一个自定义的用户模型 User,其中包含 idname 属性。get_id() 方法是必须的,它返回用户的唯一标识符,这里我们简单地将 id 转换为字符串返回。

然后,在应用中初始化 LoginManager 并将其应用到 Flask 应用上。为了实现用户登录、登出和用户加载,我们定义了几个相应的视图函数。

在登录页面的路径 /login/<user_id> 中,我们根据用户提供的 user_id 从数据库中获取用户信息,并使用 login_user() 方法登录该用户,此时 current_user 将表示已经登录的用户。我们可以通过 current_user.name 来获取当前用户的姓名。

在保护的页面 /protected 中,我们先检查用户是否通过身份验证(已登录),然后使用 current_user.name 获取当前用户的姓名并返回给用户。

最后,当用户访问 /logout 路径时,我们通过 logout_user() 方法登出当前用户并返回一个相应的消息。

以上是一个简单的示例,演示了如何使用 Flask Login 获取当前用户的姓名。