flask自己写登录验证和角色验证
发布人:shili8
发布时间:2025-03-11 17:44
阅读次数:0
**Flask 登录验证和角色验证**
在 Flask 应用中,登录验证和角色验证是非常重要的功能。下面我们将一步步地实现这些功能。
###1. 安装必要的库首先,我们需要安装 `flask` 和 `flask-login` 库。
bashpip install flask flask-login
###2. 配置 Flask 应用在 `app.py` 文件中,配置 Flask 应用:
from flask import Flask, render_template, request, redirect, url_forfrom flask_login import LoginManager, UserMixin, login_user, logout_user, current_userapp = Flask(__name__) app.config['SECRET_KEY'] = 'secret_key' # 配置登录管理器login_manager = LoginManager() login_manager.init_app(app)
###3. 定义用户模型定义一个 `User` 类,继承自 `UserMixin`:
class User(UserMixin): def __init__(self, id, username, password, role): self.id = id self.username = username self.password = password self.role = role @classmethod def get(cls, user_id): # 从数据库中获取用户信息 pass def is_authenticated(self): return True def is_active(self): return True def is_anonymous(self): return False def get_id(self): return str(self.id)
###4. 实现登录验证实现 `login_user` 函数,用于登录验证:
@login_manager.user_loaderdef load_user(user_id):
user = User.get(int(user_id))
if user:
return user else:
return None@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 从数据库中获取用户信息 user = User.get(username)
if user and user.password == password:
login_user(user)
return redirect(url_for('index'))
else:
return render_template('login.html', error='Invalid username or password')
return render_template('login.html')
###5. 实现角色验证实现 `role_required` 装饰器,用于角色验证:
def role_required(role):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
if current_user.role == role:
return func(*args, **kwargs)
else:
return redirect(url_for('index'))
return wrapper return decorator@app.route('/admin')
@role_required('admin')
def admin():
return render_template('admin.html')
@app.route('/user')
@role_required('user')
def user():
return render_template('user.html')
###6. 实现注销功能实现 `logout_user` 函数,用于注销:
@app.route('/logout', methods=['GET'])
def logout():
logout_user()
return redirect(url_for('index'))
以上就是 Flask 登录验证和角色验证的基本实现。当然,这只是一个简单的例子,你可以根据实际需求进行扩展和修改。
**注意:**
* 在生产环境中,需要使用安全的密码存储方式,如 bcrypt 或 scrypt。
* 需要在数据库中创建相应的表格来存储用户信息。
* 可以使用 Flask-Admin 来实现管理后台。

