用户认证和权限管理:Flask-Login
简介
Flask-Login库用于管理用户登录状态
安装
python -m pip install flask-login
示例
app.py
from flask import Flask, render_template, request, redirect, url_for
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required
app = Flask(__name__)
app.secret_key = "11223344"
# 实例化登录管理器对象
login_manager = LoginManager(app)
login_manager.login_view = "login" # 验证失败后跳转的页面的url
login_manager.session_protection = "strong" # 会话保护级别
login_manager.login_message = "欢迎回来" # 在将用户重定向到登录页面时闪出的消息
# 定义用户模型
class User(UserMixin):
def __init__(self, id, username, password):
self.id = id
self.username = username
self.password = password
# 用户认证的回调函数
@login_manager.user_loader
def load_user(user_id):
"""用装饰器装饰的回调函数, 用于从绘画中根据user_id重新加载用户信息。如果用户不存在, 则返回None"""
curr_user = User(1, "admin", "123456")
return curr_user
# 显示登录表单
@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 == "123456":
user = load_user("1")
print(user)
login_user(user)
return redirect(url_for("index"))
return "用户登录失败"
return render_template("login.html")
# 显示主页
@app.get("/index")
@app.get("/")
@login_required
def index():
return render_template("index.html")
# 用户注销
@app.route("/logout")
@login_required
def logout():
logout_user()
return redirect(url_for("login"))
@app.get("/foo")
@login_required
def foo():
return "If you can see this, you are logged in."
if __name__ == "__main__":
app.run(host="127.0.0.1", port=5000)
templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
首页
</body>
</html>
templates/login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form name="myform" method="post">
<label>用户名:</label>
<input type="text" name="username" />
<br>
<label>密码:</label>
<input type="text" name="password" />
<button type="submit">提交</button>
</form>
</body>
</html>