如何在Flask中创建管理页面

时间:2019-09-11 05:50:38

标签: python authentication flask

我目前有一个简单的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中更容易实现,因为可以直接创建管理员用户页面。

1 个答案:

答案 0 :(得分:0)

通常,您没有管理员用户的单独登录名。相反,您在每个用户上都有角色。因此,如果用户具有管理员角色,则可以查看某些页面。然后,您可以使用flask-user和@roles_required decorator控制对特定路由的访问。