前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask-Admin 增加自定义Action

Flask-Admin 增加自定义Action

作者头像
用户1416054
发布2018-08-02 11:43:31
1.8K0
发布2018-08-02 11:43:31
举报
文章被收录于专栏:JackeyGao的博客JackeyGao的博客

Flask-Admin 增加自定义Action

Posted May 12, 2017

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

UserView.py

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

Python

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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)

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flask-Admin 增加自定义Action
    • UserView.py
      • 增加row action按钮
        • 增加对应的endpoint
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档