我目前有一个简单的Flask应用程序,它使用flask_login
和@login_required
装饰器对注册用户进行身份验证。所以某些页面只能被注册用户访问。
但是,我想创建另一层身份验证,只有管理员用户可以访问管理仪表板和管理员登录页面。你知道吗
这是我的视图.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)
我尝试重新使用flask\u登录导入,用admin\u前缀重命名它们,并将它们应用到admin view函数,但似乎不起作用。你知道吗
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中,这要容易得多,因为管理用户页面是开箱即用地生成的。你知道吗
通常情况下,管理员用户没有单独的登录名。相反,每个用户都有角色。因此,如果用户具有管理员角色,他们就可以看到某些页面。然后使用flask user和@roles_required decorator控制对特定路由的访问。你知道吗
相关问题 更多 >
编程相关推荐