Flask 使用Flask_login和jinja2模板

Flask 使用Flask_login和jinja2模板

在本文中,我们将介绍如何在Flask应用中使用Flask_login扩展,并将session与jinja2模板结合起来使用。

Flask_login是一个Flask的扩展,它提供了用户认证和会话管理的功能。它可以轻松地为你的应用添加登录、登出以及用户会话的支持。在本文中,我们将以一个简单的示例来说明如何使用Flask_login和jinja2模板。

阅读更多:Flask 教程

准备工作

在开始之前,我们需要安装Flask和Flask_login。可以使用以下命令来安装它们:

pip install Flask
pip install Flask-login

创建Flask应用

首先,我们需要创建一个Flask应用。在项目的根目录下创建一个名为app.py的文件,然后输入以下代码:

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

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

login_manager = LoginManager()
login_manager.init_app(app)

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

@login_manager.user_loader
def load_user(user_id):
    '''通过用户ID加载用户对象'''
    return User.get(user_id)

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

在上面的代码中,我们创建了一个基本的Flask应用,并使用了Flask_login扩展进行用户认证和会话管理。我们定义了一个根路由’/’,并使用@login_required装饰器来确保只有登录用户才能访问该页面。如果用户未登录,则会自动重定向到登录页面。

同时,我们还为传递给render_template()函数的index.html模板提供了一个current_user对象。current_user对象表示当前登录的用户。我们稍后将创建index.html模板来展示用户相关的信息。

创建登录视图

接下来,我们需要创建登录视图。在app.py文件中,添加以下代码:

@app.route('/login', methods=['GET', 'POST'])
def login():
    '''处理用户登录'''
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username == 'admin' and password == 'password':
            user = User(username)
            login_user(user)  # 使用Flask_login的login_user函数进行用户登录
        else:
            flash('Invalid credentials')
    return render_template('login.html')

上面的代码创建了一个/login路由,处理用户的登录请求。如果请求方式是POST,我们将获取用户名和密码,并进行简单的验证。如果验证通过,我们创建一个User对象并使用Flask_login的login_user函数将用户登录状态保存到会话中。否则,我们将展示一个提示信息。

创建登出视图

然后,我们需要创建登出视图。在app.py文件中,添加以下代码:

@app.route('/logout')
@login_required
def logout():
    '''处理用户登出'''
    logout_user()  # 使用Flask_login的logout_user函数进行用户登出
    return redirect(url_for('login'))

上述代码创建了一个/logout路由,处理用户登出请求。我们使用Flask_login的logout_user函数来处理登出操作,并将用户重定向到登录页面。

创建模板文件

现在,我们需要创建两个模板文件:index.html和login.html。在项目的根目录下,创建一个名为templates的文件夹,然后在该文件夹下创建index.html和login.html文件。

首先,让我们创建index.html文件,并添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h1>Welcome {{ current_user.username }}!</h1>
    <p>您已经成功登录。</p>
    <a href="{{ url_for('logout') }}">Logout</a>
</body>
</html>

在上面的代码中,我们使用了jinja2模板引擎的语法。通过{{ current_user.username }}可以获取当前登录用户的用户名。我们还添加了一个Logout的链接,用户点击该链接后将执行登出操作。

接下来,让我们创建login.html文件,并添加以下代码:

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form action="{{ url_for('login') }}" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>
        <br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>
        <br>
        <input type="submit" value="Login">
    </form>
</body>
</html>

在上述代码中,我们创建了一个简单的登录表单。用户需要输入用户名和密码,然后点击登录按钮,将表单数据提交到/login路由。

运行应用

完成上述步骤后,我们可以运行应用并测试登录功能。在终端中,切换到项目的根目录,并输入以下命令:

python app.py

然后,访问http://localhost:5000/,应该重定向到登录页面。输入用户名admin和密码password后,将显示欢迎页面,并展示当前登录用户的用户名。点击Logout链接将执行登出操作,并重定向到登录页面。

总结

本文介绍了如何在Flask应用中使用Flask_login和jinja2模板。我们学习了如何进行用户登录和登出操作,并在jinja2模板中展示当前登录用户的信息。通过使用Flask_login库,我们可以轻松地为Flask应用添加用户认证和会话管理的功能,提高应用的安全性和用户体验。希望本文对你有所帮助!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程