当前位置: 首页 > article >正文

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、至此,大工搞成 

 

 


http://www.kler.cn/a/463809.html

相关文章:

  • Niushop商城商业插件_cps联盟_包装转换_视频购物_同城配送_上门预约等插件的安装方法
  • 学习路之VScode--自定义按键写注释(插件)
  • JeeSite 快速开发平台:全能企业级快速开发解决方案|GitCode 光引计划征文展示
  • HarmonyOS鸿蒙开发 应用开发常见问题总结(持续更新...)
  • 供需平台信息发布付费查看小程序系统开发方案
  • 大模型 LangChain 开发框架:Runable 与 LCEL 初探
  • pytorch Batch Normalization介绍
  • 我有服务器之——内网穿透
  • Kraft模式安装Kafka(含常规、容器两种安装方式)
  • 抖音短视频矩阵系统源码开发技术解析
  • Vue学习之路:从入门到实践
  • 穷举vs暴搜vs深搜vs回溯vs剪枝_全排列_子集
  • linux安装mysql80
  • Lesson 12 Self-supervised Learning for Speech and Image
  • 牛客网最新 1180 道 Java 面试题及答案整理
  • cjson系列——EXAMPLES
  • PHP-Casbin v4.0.0 发布,支持 ACL、RBAC、ABAC 等模型的访问控制框架
  • OpenCV-Python实战(12)——图像金字塔
  • 机器学习随机森林回归模型数据预处理中归一化或者标准化
  • SQL 建表语句详解
  • Vue演练场基础知识(二)表单绑定+条件渲染
  • 【2024年-12月-25日-开源社区openEuler实践记录】easybox:简化开发运维流程的开源百宝箱
  • Android Gradle JVM配置文件gradle.properties优先级查找
  • Android TV端弹出的PopupWindow没有获取焦点
  • ECMAScript 变量
  • 纯血鸿蒙ArkUI按钮组件详解