在本节中,我们将实现一个简单的用户登录逻辑,利用 Flask 框架来处理用户认证。我们将使用 Flask-Login
扩展框架来管理用户会话。
环境准备
首先,确保你已经安装了 Flask 和 Flask-Login。你可以使用以下命令进行安装:
1
| pip install Flask Flask-Login
|
创建 Flask 应用
首先,我们要创建一个基本的 Flask 应用并初始化 Flask-Login
。
1 2 3 4 5 6 7 8 9 10 11
| from flask import Flask, render_template, redirect, url_for, request, flash from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
app = Flask(__name__) app.secret_key = 'your_secret_key'
login_manager = LoginManager() login_manager.init_app(app)
users = {'admin': {'password': 'admin123'}}
|
创建用户模型
我们将定义一个简单的用户模型。对于演示简洁性,我们将用户信息存储在一个字典中。
1 2 3 4 5 6 7
| class User(UserMixin): def __init__(self, id): self.id = id
@login_manager.user_loader def load_user(user_id): return User(user_id)
|
登录视图
接下来,我们将创建一个登录视图,它将处理表单提交并验证用户。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] user = users.get(username) if user and user['password'] == password: user_obj = User(username) login_user(user_obj) return redirect(url_for('protected'))
flash('用户名或密码错误') return render_template('login.html')
|
登录模板
创建一个简单的登录表单 login.html
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!doctype html> <html> <head> <title>登录</title> </head> <body> <h1>用户登录</h1> <form method="POST"> <input type="text" name="username" placeholder="用户名" required> <input type="password" name="password" placeholder="密码" required> <button type="submit">登录</button> </form> <p style="color:red;">{{ get_flashed_messages()[0] }}</p> </body> </html>
|
受保护的视图
为了确保只有已登录的用户可以访问某些页面,我们需要添加一个受保护的视图。
1 2 3 4
| @app.route('/protected') @login_required def protected(): return f'欢迎,{current_user.id}!你已成功登录。'
|
注销功能
添加注销功能,让用户可以退出登录。
1 2 3 4 5
| @app.route('/logout') @login_required def logout(): logout_user() return redirect(url_for('login'))
|
运行应用
最后,添加运行 Flask 应用的代码:
1 2
| if __name__ == '__main__': app.run(debug=True)
|
总结
在本节中,我们实现了一个简单的用户登录逻辑,包括用户验证、登录和注销功能。我们使用了 Flask-Login
来管理用户会话,确保用户能够安全地访问受保护的内容。通过结合代码和示例,我们可以全面理解 Flask 的用户认证机制。