当前位置: 首页 > 面试题库 >

Flask-Admin不同的表单和column_list用于不同的角色

邹高懿
2023-03-14
问题内容

假设我MyModelView是普通用户还是超级用户,我想显示不同的列。

覆盖is_accessibleMyModelView已经完全没有效果

from flask_security import Security, SQLAlchemyUserDatastore, current_user

class MyModelView(SafeModelView):

    # ...

    def is_accessible(self):
        if current_user.has_role('superuser'):
            self.column_list = superuser_colum_list
            self.form_columns = superuser_form_columns
        else:
            self.column_list = user_colum_list
            self.form_columns = user_form_columns
        return super(MyModelView, self).is_accessible()

    # Has same effect as 

    def is_accessible(self):
        return super(MyModelView, self).is_accessible()

并且定义条件类属性也不起作用current_user(未定义)(根据current_user.is_authenticated()AttributeErrorNoneType错误)。在等效的ModelView中做同样的事情,仍然没有定义__init__current_user

class MyModelView(SafeModelView):

    #[stuff]

    if current_user.has_role('superuser'):
            column_list = superuser_colum_list
            form_columns = superuser_form_columns
    else:
        column_list = user_colum_list
        form_columns = user_form_columns

    #[other stuff]

仅供参考,SafeModelView可以是从dgBaseView前面提到的问题继承的任何类。


问题答案:

我通常定义视图类属性,例如column_list属性。它允许你向其中添加一些动态逻辑:

from flask import has_app_context
from flask_security import current_user

class MyModelView(SafeModelView):
    @property
    def column_list(self):
        if has_app_context() and current_user.has_role('superuser'):
            return superuser_column_list
        return user_column_list

    @property
    def _list_columns(self):
        return self.get_list_columns()

    @_list_columns.setter
    def _list_columns(self, value):
        pass

使用这种方法的问题(以及为什么column_listis_accessible函数中重新分配值不起作用)是许多视图属性在应用程序启动时被缓存并存储在私有属性中。column_list例如,缓存_list_columns属性中,因此你也需要重新定义它。你可以在flask_admin.model.base.BaseModelView._refresh_cache方法中查看此缓存的工作方式。

has_app_context这里需要Flask 方法,因为column_listcurrent_user变量还没有有意义的值时,第一次读取发生在应用程序启动时。

form_columns属性也可以这样做。这些属性将如下所示:

@property
def form_columns(self):
    if has_app_context() and current_user.has_role('superuser'):
        return superuser_form_columns
    return user_form_columns

@property
def _create_form_class(self):
    return self.get_create_form()

@_create_form_class.setter
def _create_form_class(self, value)
    pass

@property
def _edit_form_class(self):
    return self.get_edit_form()

@_edit_form_class.setter
def _edit_form_class(self, value):
    pass


 类似资料:
  • 所以С能否请您向我解释一下,正确的方法是否是为不同类型的用户提供不同的DBContext。 例如:我们有两种方法的ApicController: 之后,每个命令都依赖于具有不同配置的不同服务/DbContext。例如: 我觉得我错过了什么或者有更好的解决办法

  • 类别表 元表 meta和cats表公共是c_id meta表cats c_id(1)meta表有2(Abhijit1,Abhijit2)行和m_id(1,2) 事务表 交易和元表通用的是m_id交易m_id 1有两行t_id(1,2)。此表主要用于支付金额和日期 我想为每个类别求和()所有成本(从元表)和金额(从事件表)。 表与 这是错的。猫的成本ID 1是300,但这里我有400 这里的总和(m

  • 是否可以将具有不同用户角色的用户重定向到laravel 5.1中的不同页面? 我研究了Auth中间件和Auth控制器,但没有发现任何处理登录请求本身的东西。 我发现了一些关于登录重定向在这里Laravel重定向回到原来的目的地后登录,但我不知道在哪里把建议的代码片段。 有人能帮我吗

  • 在我的Spring Boot应用程序中,我有一个REST控制器,其方法如下: 只有具有权限\u UPDATE\u OWN\u COMMENT或权限\u UPDATE\u ANY\u COMMENT的用户才能使用此endpoint。 在这个方法中,我需要创建两个不同的流-一个用于具有的用户,另一个用于具有权限的用户。 所以我的问题是——为了在单个方法中实现这些不同的逻辑流,Spring Securi

  • 问题内容: 我在SQL查询中使用sum()寻找帮助: 我使用它是因为我正在执行“分组依据”,这可以确保同一行不会被重复计数。 问题是SUM(conversions.value)对每行的“值”计数超过一次(由于分组依据) 我基本上想为每个DISTINCT conversions.id 做。 那可能吗? 问题答案: 我可能是错的,但据我了解 conversions.id* 是表 转换 的 主键 * s

  • 我需要你对Web应用程序概念的帮助。我想使用单个查询从不同的表中获取不同的列。所有表中的一列都是相同的,比如pk_data(varchar)。但是我需要基于列的不同列。例如,我需要第一个表的用户名和第二个表的地址,第三个表的年龄和第四个表的成本。但是我还需要使用带有列的where子句。 我们可以用其他方式理解这个问题。我有一个变量,其中包含许多。我想根据此记录获取数据。 并且< code>Hash