如何在Flas中创建管理页面

2024-03-29 14:21:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个简单的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中,这要容易得多,因为管理用户页面是开箱即用地生成的。你知道吗


Tags: fromimportformappflaskfordatareturn
1条回答
网友
1楼 · 发布于 2024-03-29 14:21:48

通常情况下,管理员用户没有单独的登录名。相反,每个用户都有角色。因此,如果用户具有管理员角色,他们就可以看到某些页面。然后使用flask user和@roles_required decorator控制对特定路由的访问。你知道吗

相关问题 更多 >