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

使用Flask.g.current_user()获取当前登录用户的信息

发布时间:2024-01-07 12:24:35

Flask.g.current_user() 是一个常用的 Flask 扩展,用于获取当前登录用户的信息。它通常与 Flask-Login 扩展一起使用,用于管理用户认证和会话。

首先,你需要安装 Flask 和 Flask-Login 扩展。你可以使用以下命令来安装它们:

pip install flask
pip install flask-login

然后,你需要创建一个 Flask 应用,并初始化 Flask-Login 扩展。以下是一个简单的示例代码:

from flask import Flask
from flask_login import LoginManager

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'   # 设置一个密钥

login_manager = LoginManager(app)

@login_manager.user_loader
def load_user(user_id):
    # 根据用户 ID 加载用户信息
    return User.query.get(int(user_id))

@login_manager.unauthorized_handler
def unauthorized():
    # 处理用户未认证的情况
    return 'Unauthorized', 401

# 定义 User 模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True)

# 设置登录视图
@app.route('/login')
def login():
    # 假设这里进行了用户认证,然后将用户信息保存到 Flask-Login 中
    user = User.query.get(1)
    login_user(user)
    return 'Logged in successfully'

# 注销视图
@app.route('/logout')
@login_required
def logout():
    logout_user()
    return 'Logged out successfully'

# 保护某个路由,只有登录用户才能访问
@app.route('/protected')
@login_required
def protected():
    # 可以使用 Flask.g.current_user 获取当前登录用户的信息
    return f'Hello, {current_user.username}'

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

在上面的代码中,我们创建了一个简单的 Flask 应用,并初始化了 Flask-Login 扩展。然后,我们定义了 User 模型和登录视图、注销视图、以及需要保护的路由。

在保护的路由中,我们使用了 @login_required 装饰器来确保只有登录用户可以访问该视图。在这个视图中,我们可以使用 Flask.g.current_user 来获取当前登录用户的信息,例如 current_user.username。这里的 current_user 是 Flask-Login 提供的全局变量。

当用户访问 /protected 路由时,如果用户不是登录状态,则会被重定向到登录页面。在成功登录之后,用户将被重定向回原来的页面,并显示类似于 "Hello, username" 的消息。

请注意,在使用 Flask.g.current_user 之前,你需要确保用户已经通过登录视图进行了认证,并将用户信息保存到 Flask-Login 中,例如使用 login_user(user)。在示例代码中,我们假设用户1已经通过认证。

希望以上示例能够帮助你理解如何使用 Flask.g.current_user 来获取当前登录用户的信息。