专栏首页JackeyGao的博客Flask-Admin 增加自定义Action

Flask-Admin 增加自定义Action

Flask-Admin 增加自定义Action

Posted May 12, 2017

默认情况下, Flask Admin提供了两个Row Action, 即delete和edit. 但是大多数情况下, 这些并不能满足有其他快捷操作需求, 好在Flask Admin提供增加这种按钮的接口.

UserView.py

这是我原本的Admin ModelView实现, 很明显我没有对row actions做任务的定制.

Python

class UserView(ModelView):
    column_default_sort = ('active', False)
    column_list = ('name', 'email', 'active', 'roles')
    column_filters = ('name', 'active')
    form_create_rules = ('name', 'avatar', 'email', 'active', 'roles')

增加row action按钮

我们可以通过column_extra_row_actions属性增加row action.

Python

from flask_admin.model.template import EndpointLinkRowAction

class UserView(ModelView):
    column_default_sort = ('active', False)
    column_list = ('name', 'email', 'active', 'roles')
    column_filters = ('name', 'active')
    form_create_rules = ('name', 'avatar', 'email', 'active', 'roles')

    column_extra_row_actions = [
        EndpointLinkRowAction(
            'off glyphicon glyphicon-off',
            'user.activate_user_view',
        )
    ]

Flask-admin提供了row action的模版, 其中上面使用的EndpointLinkRowAction, 传入的是一个view(user.activate_user_view). 它是定义在UserView上的一个view方法(请看下面代码). 同时row action也有LinkRowAction类型, 它接受icon class和一个url. 另外它支持更多的类型, 请看这里:Github

增加对应的endpoint

在上面我们增加了一个EndpointLinkRowAction, 但是我们还没有定义动作具体的逻辑. 下面我们定义user.activate_user_view来接收这个动作的参数, 并实现相应的功能.

Python

class UserView(ModelView):
    column_default_sort = ('active', False)
    column_list = ('name', 'email', 'active', 'roles')
    column_filters = ('name', 'active')
    form_create_rules = ('name', 'avatar', 'email', 'active', 'roles')

    column_extra_row_actions = [
        EndpointLinkRowAction(
            'off glyphicon glyphicon-off',
            'user.activate_user_view',
        )
    ]

    @expose('/activate/', methods=('GET',))
    def activate_user_view(self):
        """
            Activate user model view. Only GET method is allowed.
        """
        return_url = get_redirect_target() or self.get_url('.index_view')

        id = request.args["id"]
        model = self.get_one(id)

        if model is None:
            flash(gettext('用户不存在'), 'error')
            return redirect(return_url)

        if model.active:
            flash(gettext('已经激活, 无需重复激活.'), 'warning')
            return redirect(return_url)

        model.active = True
        model.save()

        flash(gettext('已激活'), 'success')
        return redirect(return_url)

到此我们增加一个快速激活用户的方法就完成了.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django + MySQL 查询不区分大小写问题

    由于测试环境的 sqlite 没有问题, 所以怀疑在 mysql 的配置上面。 原来是字符集校对规则的问题, utf8_general_ci 不区分大小写, 可...

    用户1416054
  • DRF Swagger自定义的action文档参数实现

    这里不讲 DRF(django rest framework) 和 DRS(django rest swagger) 如何结合使用, 在以上两个项目文档中都有相...

    用户1416054
  • Django 进阶学习 - 文本框过滤

    默认情况下django可以对列进行过滤, 但大多数是对Relationship列通过list_filter 直接指定field name就可以方便的进行过滤了,...

    用户1416054
  • 移动应用如何埋点收集什么数据以便于统计分析?

    国内比较普遍的第三方统计工具是友盟和talking data,在大多数的情况下这两个差别不大,但是如果你的app是游戏或者需要用到互联网金融的一些垂直细分统计,...

    CSDN技术头条
  • 来自MongoDB的新年大礼: MongoDB 4.0将正式支持ACID事务!

    MongoDB CTO Eliot Horowitz 刚刚于2月16日凌晨在MongoDB西雅图大会上宣布(当地时间2月15日上午),MongoDB将在4.0版...

    MongoDB中文社区
  • 来自MongoDB的新年大礼: MongoDB 4.0将正式支持ACID事务!

    MongoDB CTO Eliot Horowitz 刚刚于2月16日凌晨在MongoDB西雅图大会上宣布(当地时间2月15日上午),MongoDB将在4.0版...

    MongoDB中文社区
  • Quartz.net官方开发指南 第六课 : CronTrigger

    如果你需要像日历那样按日程来触发任务,而不是像SimpleTrigger 那样每隔特定的间隔时间触发,CronTriggers通常比SimpleTrigger更...

    张善友
  • laravel定时任务配置

    定时任务写在app/Console/Kernel.php文件中的schedule方法中即可,你可以设置定时执行闭包,或者定时执行一个命令。

    ianzhi
  • python3 列表内多个字典 相同

    py3study
  • 【求职】大数据告诉你,怎么投简历命中率高?

    有人在喊“招工难”:上调了待遇、放宽了标准,还是连续几个月招不到人。 ? 有人在喊“就业难”:工作一年比一年难找,应聘时一个岗位几十人来面试。 ? 大学生找工...

    小莹莹

扫码关注云+社区

领取腾讯云代金券