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

Python中如何通过flask_login.current_user.name()函数获取用户姓名

发布时间:2024-01-03 20:26:29

在使用 Flask-Login 扩展时,可以使用 current_user 变量来获取当前登录用户的信息。current_user 是一个全局变量,可以在任何需要获取当前用户信息的地方使用。

要获取用户姓名,可以使用 current_user.name 属性。该属性需要在用户登录成功后设置。

下面是一个使用 Flask-Login 获取用户姓名的示例:

首先,需要安装 Flask-Login 扩展。在终端中运行以下命令:

pip install flask-login

然后,在 Flask 应用中导入相应模块:

from flask import Flask, render_template, redirect, url_for
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user

接下来,创建一个 Flask 应用实例,并设置一个密钥,用于加密用户的会话信息:

app = Flask(__name__)
app.secret_key = 'your_secret_key'

然后,实例化一个 LoginManager 对象,并将其初始化应用:

login_manager = LoginManager(app)

定义一个简单的用户类,继承自 UserMixin 类,并设置一个用户姓名属性:

class User(UserMixin):
    def __init__(self, id, name):
        self.id = id
        self.name = name

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

接下来,需要实现 Flask-Login 所需的几个回调函数。

首先是 load_user 函数,通过用户 ID 返回用户对象:

@login_manager.user_loader
def load_user(user_id):
    return users.get(user_id)

然后是登录页面的处理函数:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 获取用户名和密码
        username = request.form['username']
        password = request.form['password']

        # 模拟用户认证过程
        user = None
        for u in users.values():
            if u.name == username:
                user = u
                break

        if user is not None and password == 'password':
            # 登录用户
            login_user(user)
            return redirect(url_for('index'))

        # 登录失败,重新显示登录页面
        flash('Invalid username or password')

    return render_template('login.html')

最后,定义一个需要登录才能访问的首页,并显示当前用户的姓名:

@app.route('/')
@login_required
def index():
    return f'Hello, {current_user.name}!'

以上代码中,@login_required 装饰器用于保护 index 视图,只有登录用户才能访问。

运行 Flask 应用,并访问 http://localhost:5000/login 登录页面。输入用户名和密码(密码为 "password"),登录成功后将重定向到首页,并显示当前用户的姓名。