需求:菜单管理功能(增、删、改),多级树形菜单展示

数据库表设计

create table if not exists Menu(
id serial primary key ,
title varchar (50) not null ,
parent_id int ,
url varchar (100),
app_id int ,
icon varchar (50),
sortby int default 0,
create_time timestamp,
update_time timestamp,
foreign key (parent_id) references Menu(id) on delete cascade on update cascade
);

Model 定义

class Menu:
def __init__(self, id, title, parent_id, url, app_id, icon, sort_by, create_time, update_time, subMenus):
self._id = id
self._title = title
self._parent_id = parent_id
self._url = url
self._app_id = app_id
self._icon = icon
self._sortby = sort_by
self._create_time = create_time
self._update_time = update_time
self._subMenus = subMenus @property
def id(self):
return self._id
@property
def title(self):
return self._title
@property
def parent_id(self):
return self._parent_id
@property
def url(self):
return self._url
@property
def app_id(self):
return self._app_id
@property
def icon(self):
return self._icon
@property
def sortby(self):
return self._sortby
@property
def subMenus(self):
return self._subMenus

理论上Models应该中的参数应该和数据库表字段对应,但是subMenus我们不需要存库,反给前端用的。

核心代码

def set_subMenus(id, menus):
"""
:param id: 父id
:param subMenu:子菜单列表
:return: 没有子菜单返回None 有子菜单返回子菜单列表
"""
try:
_subMenus = [] for menu in menus:
if menu.parent_id == id:
_subMenus.append(menu)
for sub in _subMenus:
menu2 = _query_sub_menu_info(sub.id)
if len(menus):
sub._subMenus = set_subMenus(sub.id, menu2)
else:
sub.__delattr__('_subMenus')
# 子菜单列表不为空
if len(_subMenus):
# print(sub_list)
return _subMenus
else: # 没有子菜单了
return None
except Exception as e:
LOG.exception('error query_sub_menu_info !')
raise e
_query_sub_menu_info 方法是查询返回

测试方法:
def test_sub_menu_list(self):
Menus = []
rootMenu = GuardianModelDao._query_root_menu_info()
for root in rootMenu:
subMenu = GuardianModelDao._query_sub_menu_info(root.id)
root = jsonpickle.loads(jsonpickle.encode(root))
if root.subMenus is not None:
root.subMenus.append(GuardianModelDao.set_subMenus(root.id, subMenu))
Menus.append(root)
 

 

Python 递归返回树形菜单JSON串 <flask>的更多相关文章

  1. 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等

    1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...

  2. PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹

    PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹 一.使用递归获取树形菜单 数据表category(id,name,parent_id) <?php class category{ / ...

  3. java 传入list集合 返回树形菜单,for循环遍历

    public List<SysPermissionVO> getTreeMenu(List<SysPermissionVO> list,SysPermissionVO sysP ...

  4. [Python] 递归返回值 为 None 的问题

    递归返回值 为 None 的问题 解决办法: 在递归调用下一个 递归 函数前面,一定要加上 return,否则就会返回 None 如红色 所处的return: def getAllCityUrl(ur ...

  5. JAVA递归生成树形菜单

    递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...

  6. python字典、字符串(json串)、字节串之间的转化

    字典和json字符串(本质也是字符串)之间的转化用json.dumps和json.loads() json.dumps():   字典→json字符串 json.loads():     json字符 ...

  7. Unity 引擎UGUI之自定义树形菜单(TreeView)

    先上几张效果图:          如果你需要的也是这种效果,那你就来对地方了! 目前,我们这个树形菜单展现出来的功能如下: 1.可以动态配置数据源: 2.点击每个元素的上下文菜单按钮(也就是图中的三 ...

  8. DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案

    最近在对DWZ和asp.net MVC3进行整合,其中遇到了很多问题,总算一一解决了,今天就说说题目所示的问题解决方案. 想做一个基于角色的权限管理,要对每一个Action进行权限控制.就想用DWZ的 ...

  9. 构建简单的json树形菜单

    json结构: var Menu = [{ tit:"一级菜单", submenu:[{ tit:"二级菜单", url:"", func: ...

随机推荐

  1. Ubuntu16.04修改静态ip地址

    https://blog.csdn.net/mdw5521/article/details/79270035

  2. C#在线运行--cmd方法

       此次C#在线运行采用cmd.exe用csc对文件进行编译,然后再运行的思路实现在线运行的效果.不过会生成二个文件(.cs和.exe),可能需要定期清除临时文件夹. 首先利用时间戳生成唯一文件名, ...

  3. docker run hello-world失败

    提示镜像拉取失败,解决方案 到 https://cr.console.aliyun.com/   注册一个账户 列表中就有 加速器 启动  Docker 端  右键  选择配置 在Docker Dae ...

  4. Sqlserver风格规范

    常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 4.自增长标识建议采用bigint ...

  5. 死磕Java之聊聊HashSet源码(基于JDK1.8)

    HashSet的UML图 HashSet的成员变量及其含义 public class HashSet<E> extends AbstractSet<E> implements ...

  6. 打开Word 2010 老提示安装 Office single image 2010

    解决办法: WScript.Echo "Try to repair registry key..."  'verify Office version  Set objshell = ...

  7. Xcode9新功能

    1.折叠代码 局部折叠(折叠一个函数):Command+Option+Left/Right 全局折叠(折叠当前文件下的全部函数): Shift+Command+Option+Left/Right 折叠 ...

  8. java 实验2 类

    共5道大题  最后一题为自动洗牌发牌系统 1) 编写一个类实现银行帐户的概念.包括的属性有:帐号.储户姓名.地址.存款余额,包括的方法有:存款.取款.查询.计算利息.累加利息等. public cla ...

  9. 关于 Linq to EF 的内存泄漏问题

    查到一些解决方案:             1, http://www.codethinked.com/keep-your-iqueryable-in-check 自定义常用方法,屏蔽IQuery功能 ...

  10. rabbitmq消息消费者

    pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:// ...