烧瓶管理员"AdminIndexView"无法限制 /admin 页面



这是我在stackoverflow的第一个问题。

我需要改变flask_admin的默认页面,但它不工作,我想使它不可访问的非管理员用户…

管理文件:

from flask import redirect, url_for
from flask_admin import AdminIndexView
from flask_admin.contrib.sqla import ModelView
from flask_login import current_user
from wtforms.fields import FileField
from wtforms.validators import DataRequired
from . import adm, db
from .models import User, Product

def configure():
adm.index_view = IndexAdmin()
adm.add_view(UserAdmin(User, db.session))
adm.add_view(ProductsAdmin(Product, db.session))

class IndexAdmin(AdminIndexView):
def is_accessible(self):
return current_user.is_authenticated and current_user.admin
def inaccessible_callback(self, name, **kwargs):
return redirect(url_for("views.home_page"))

class UserAdmin(ModelView):
form_excluded_columns = ["created_date", "updated_date", "products", "adresses"]
column_exclude_list = ["password", "phone", "money"]
column_searchable_list = ["email"]
def is_accessible(self):
return current_user.is_authenticated and current_user.admin
def inaccessible_callback(self, name, **kwargs):
return redirect(url_for("admin.index"))

class ProductsAdmin(ModelView):
form_excluded_columns = ["created_date", "updated_date", "user_products"]
column_exclude_list = ["image"]
column_type_formatters = {"image": FileField(label="Image", validators=[DataRequired()])}
def is_accessible(self):
return current_user.is_authenticated and current_user.admin
def inaccessible_callback(self, name, **kwargs):
return redirect(url_for("admin.index"))

我试图这样做,把页面限制,但这是不工作…

class IndexAdmin(AdminIndexView):
def is_accessible(self):
return current_user.is_authenticated and current_user.admin
def inaccessible_callback(self, name, **kwargs):
return redirect(url_for("views.home_page"))

我不确定这是差距,但官方文档不建议将此设置为adm.index_view =。相反,https://flask-admin.readthedocs.io/en/latest/api/mod_base/#default-view建议:

admin = Admin(index_view=MyHomeView())

因此,一种可能性是Admin()的init进程对index_view做了一些当你直接设置它时不会发生的事情。

文档(https://flask-admin.readthedocs.io/en/latest/api/mod_base/#flask_admin.base.Admin.init_app)还指出,您可以通过使用init_app来延迟此操作,这是我以前使用过的方法。比如:

admin.init_app(app, index_view= MyHomeView())

最新更新