一个简洁高效的Flask用户管理示例
- 游戏开发
- 2025-08-30 08:27:01

Flask-Login 是 Flask 的用户管理扩展,提供 用户身份验证、会话管理、权限控制 等功能。
适用于:
• 用户登录、登出
• 记住用户(“记住我” 功能)
• 限制未登录用户访问某些页面
• 用户会话管理
1. 安装 Flask-Login
pip install flask-login flask-sqlalchemymain.py
from flask import Flask, render_template, redirect, url_for, request, flash from flask_sqlalchemy import SQLAlchemy from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user app = Flask(__name__) # 配置 Flask 和数据库 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' # 使用 SQLite 数据库 app.config['SECRET_KEY'] = 'your_secret_key' # Flask-Login 需要 secret key db = SQLAlchemy(app) login_manager = LoginManager(app) # 定义用户模型 class User(UserMixin, db.Model): # UserMixin 提供 Flask-Login 必需的方法 id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(100), unique=True, nullable=False) password = db.Column(db.String(200), nullable=False) # 真实应用需加密密码 # 创建数据库表(仅需运行一次) with app.app_context(): db.create_all() # Flask-Login 加载用户的回调函数 @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) # 通过 ID 获取用户 @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') if not username or not password: flash("用户名和密码不能为空!") return redirect(url_for('register')) # 检查用户是否已存在 existing_user = User.query.filter_by(username=username).first() if existing_user: flash("用户名已存在,请选择其他用户名") return redirect(url_for('register')) # 创建新用户并保存到数据库 new_user = User(username=username, password=password) # 这里应加密密码 db.session.add(new_user) db.session mit() flash("注册成功,请登录!") return redirect(url_for('login')) return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form.get('username') password = request.form.get('password') # 查找用户 user = User.query.filter_by(username=username).first() if user and user.password == password: # 这里应使用加密密码验证 login_user(user) # 登录用户 flash("登录成功!") return redirect(url_for('dashboard')) flash("用户名或密码错误") return redirect(url_for('login')) return render_template('login.html') @app.route('/dashboard') @login_required # 保护此路由,未登录用户无法访问 def dashboard(): return f"欢迎 {current_user.username}!这是您的仪表盘。 <a href='/logout'>登出</a>" @app.route('/logout') @login_required def logout(): logout_user() flash("您已成功退出!") return redirect(url_for('login')) if __name__ == "__main__": app.run(debug=True)templates/login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post"> <label>用户名:</label> <input type="text" name="username" required> <label>密码:</label> <input type="password" name="password" required> <button type="submit">登录</button> </form> </body> </html>templates/register.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post"> <label>用户名:</label> <input type="text" name="username" required> <label>密码:</label> <input type="password" name="password" required> <button type="submit">注册</button> </form> </body> </html>运行,然后访问:
• 注册:http://127.0.0.1:5000/register
• 登录:http://127.0.0.1:5000/login
• 仪表盘(必须登录):http://127.0.0.1:5000/dashboard
• 登出:http://127.0.0.1:5000/logout
一个简洁高效的Flask用户管理示例由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“一个简洁高效的Flask用户管理示例”
下一篇
TexTCNN