这是我在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())