我目前有一个简单的Flask应用程序,该应用程序使用flask_login
和@login_required
装饰器对注册用户进行身份验证。因此,某些页面仅供注册用户访问。
但是,我想创建另一层身份验证,其中只有管理员用户才能访问管理仪表板和管理员登录页面。
这是我的views.py文件。
from flask import (render_template, flash, url_for, redirect)
from models import (db, app, User)
from forms import (RegisterForm, LoginForm)
from flask_login import (LoginManager, logout_user, login_user, login_required,
current_user)
login_manager = LoginManager(app)
login_manager.login_view = "login"
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
@app.route("/")
@app.route("/home")
def home():
return render_template("home.html", title="home")
@app.route("/register", methods = ["GET", "POST"])
def register():
form = RegisterForm()
if form.validate_on_submit():
username = form.username.data
email = form.email.data
password = form.password.data
confirm_password = form.confirm_password.data
user = User(username, email, password, confirm_password)
db.session.add(user)
db.session.commit()
flash("Thanks for registering, {}".format(username.capitalize()))
return redirect(url_for("login"))
return render_template("register.html", title="register",
form=form)
@app.route("/login", methods = ["GET", "POST"])
def login():
form = LoginForm()
users = User.query.all()
if form.validate_on_submit() and users != []:
email = form.email.data
password = form.password.data
user = User.query.filter_by(email=email).first()
if user.checking_password(password) and user is not None:
login_user(user)
flash("Thanks for logging in!")
return redirect(url_for("profile"))
return render_template("login.html", title="login",
form = form)
if __name__ == "__main__":
app.run(debug=True)
我尝试通过使用admin_前缀重命名flask_login导入,并将它们应用到admin视图功能中,但是似乎没有用。
from flask_login import (LoginManager as AdminManager,
logout_user as admin_logout_user,
login_user as admin_login_user,
login_required as admin_login_required,
current_user as admin_user)
admin_manager = AdminManager(app)
admin_manager.login_view = "admin_login"
@admin_manager.user_loader
def load_admin(admin_id):
return Admin.query.get(int(admin_id))
如果有人知道我该怎么做,我将非常感激。 可以这么说,这在Django中更容易实现,因为可以直接创建管理员用户页面。
答案 0 :(得分:0)
通常,您没有管理员用户的单独登录名。相反,您在每个用户上都有角色。因此,如果用户具有管理员角色,则可以查看某些页面。然后,您可以使用flask-user和@roles_required decorator控制对特定路由的访问。