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

如何在Flask中使用flask_login.current_user获取当前用户的用户名

发布时间:2023-12-24 23:23:52

在Flask中使用flask_login.current_user可以获取当前用户的用户名。在下面的例子中,我们演示了如何在Flask应用程序中使用flask_login.current_user

首先,你需要安装Flask和Flask-Login模块。你可以使用以下命令安装这些模块:

pip install flask
pip install flask-login

接下来,我们创建一个名为app.py的文件并进行如下配置:

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

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret-key'  # 秘钥用于加密cookie
login_manager = LoginManager(app)

# 模拟用户数据库
users = {'admin': {'password': 'password'}, 'user': {'password': 'password'}}

# 用户类
class User(UserMixin):
    pass

@login_manager.user_loader
def user_loader(username):
    if username not in users:
        return None

    user = User()
    user.id = username
    return user

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/login')
def login():
    if current_user.is_authenticated:  # 检查用户是否已经登录
        return redirect('/')

    user = User()
    user.id = 'user'
    login_user(user)
    return redirect('/')

@app.route('/logout')
def logout():
    logout_user()
    return redirect('/')

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

在上面的代码中,我们首先导入了必要的模块和类。然后,我们创建了一个app对象和一个login_manager对象。我们还定义了一个简单的用户数据库,并创建了一个User类。

app.config['SECRET_KEY']是一个秘钥,用于对cookie进行加密。

@login_manager.user_loader是一个装饰器,用于装载用户。在这个函数中,我们检查用户是否存在于数据库中,并返回一个User对象。

@app.route('/login')是一个路由,当用户访问/login时,将执行login函数。在此函数中,我们创建一个User对象,设置其id为用户的用户名,并使用login_user函数登录用户。最后,我们重定向到主页。

@app.route('/logout')是一个路由,当用户访问/logout时,将执行logout函数。在此函数中,我们使用logout_user函数登出用户,并重定向到主页。

在执行以上代码后,你可以在浏览器中访问http://localhost:5000/login,你将会看到用户已经成功登录。接着,你可以在Flask应用程序的其他地方使用current_user来获取当前用户的用户名。例如,在home函数中,我们可以使用current_user.id来获取当前用户的用户名。

@app.route('/')
def home():
    if current_user.is_authenticated:
        username = current_user.id
    else:
        username = None
        
    return render_template('index.html', username=username)

在上面的代码中,我们先检查用户是否已经登录(current_user.is_authenticated),如果已经登录,则将当前用户的用户名赋值给username变量,否则,将None赋值给username变量。最后,我们将username传递给模板文件index.html

index.html中,你可以使用username变量来显示当前用户的用户名:

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    {% if username %}
        <h1>Welcome, {{ username }}!</h1>
        <a href="/logout">Logout</a>
    {% else %}
        <h1>Welcome, guest!</h1>
        <a href="/login">Login</a>
    {% endif %}
</body>
</html>

在上面的代码中,我们使用了模板语法{% ... %}来根据用户是否已经登录来显示不同的内容。

当你访问http://localhost:5000/时,你将会在页面中看到当前用户的用户名(如果已经登录),或者一个欢迎消息(如果没有登录)。

希望以上例子对你有帮助!