flask-admin 框架下添加menu_links 菜单

背景:

在使用flask-admin框架默认VIEW的UI进行开发时,我们更多时候需要将一些菜单排布到左边一些在右边,比如登录/登出 按钮往往在右边,其实框架提供能类似的能力。

制作:

1、看页面效果

2、查边了资料都没有找到有关这个需求的实现,最后看源码发现了思路,源码如下

3、通过阅读源码发现框架本身提供了类似能力,那怎么才能赋值到 menu_links 下,我们直接代码,首先继承MenuLink 实现一个连接

复制代码
from flask_admin.menu import MenuLink
from flask import redirect, url_for
from flask_login import current_user


class LogoutLink(MenuLink):

    def is_accessible(self):
        return current_user.is_authenticated
    
    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('admin/login'))

4、注册上面的连接

复制代码
    def init_app(app):
        admin = Admin(
            app,  
            name=u"AI阅读管理系统",
            index_view=MyAdminIndexView(name="首页"),
            template_mode='bootstrap3'
        )

        略

        admin.add_link(LogoutLink(name='退出', url='/admin/logout'))
        
        return admin

5、通过上面的实现我们发现自定义的菜单会顺序的出现在左侧,也就是 main_menu 菜单列表下,此刻 admin.add_link(LoginLink(name='登录', url='/admin/logout'))等同与admin.add_menu_item(LogoutLink(name='登录', url='/admin/logout'))

6、怎么办呢?继续看源码,通过分析发现只要让该自定义菜单的category 为false 即可,也就是变成全局变量即可。

7、继续阅读MenuLink 的源码查找出路,哈哈原来默认是有权限的,那好办

8、修改上面自定义的 LogoutLink 类,效果如下:

复制代码
class LogoutLink(MenuLink):

    def is_category(self):
        return False

    def is_accessible(self):
        return current_user.is_authenticated
    
    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('admin/login'))

9、至此,大工搞成

相关推荐
我的xiaodoujiao2 小时前
API 接口自动化测试详细图文教程学习系列16--项目实战演练3
python·学习·测试工具·pytest
ID_180079054732 小时前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
时空系2 小时前
第10篇:继承扩展——面向对象编程进阶 python中文编程
开发语言·python·ai编程
CHANG_THE_WORLD3 小时前
python 批量终止进程exe
开发语言·python
古城小栈3 小时前
从 cargo-whero 库中,找到提升 rust 的契机
开发语言·后端·rust
liann1193 小时前
3.2_红队攻击框架--MITRE ATT&CK‌
python·网络协议·安全·网络安全·系统安全·信息与通信
皮皮冰燃4 小时前
docker-18-WSL中安装docker并部署flask服务
docker·容器·flask
云天AI实战派4 小时前
AI 智能体问题排查指南:ChatGPT、API 调用到 Agent 上线失灵的全流程修复手册
大数据·人工智能·python·chatgpt·aigc
keep one's resolveY4 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
我的xiaodoujiao4 小时前
API 接口自动化测试详细图文教程学习系列15--项目实战演练2
python·学习·测试工具·pytest