Python 递归返回树形菜单JSON串 <flask>
需求:菜单管理功能(增、删、改),多级树形菜单展示
数据库表设计
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>的更多相关文章
- 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等
1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...
- PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹
PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹 一.使用递归获取树形菜单 数据表category(id,name,parent_id) <?php class category{ / ...
- java 传入list集合 返回树形菜单,for循环遍历
public List<SysPermissionVO> getTreeMenu(List<SysPermissionVO> list,SysPermissionVO sysP ...
- [Python] 递归返回值 为 None 的问题
递归返回值 为 None 的问题 解决办法: 在递归调用下一个 递归 函数前面,一定要加上 return,否则就会返回 None 如红色 所处的return: def getAllCityUrl(ur ...
- JAVA递归生成树形菜单
递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...
- python字典、字符串(json串)、字节串之间的转化
字典和json字符串(本质也是字符串)之间的转化用json.dumps和json.loads() json.dumps(): 字典→json字符串 json.loads(): json字符 ...
- Unity 引擎UGUI之自定义树形菜单(TreeView)
先上几张效果图: 如果你需要的也是这种效果,那你就来对地方了! 目前,我们这个树形菜单展现出来的功能如下: 1.可以动态配置数据源: 2.点击每个元素的上下文菜单按钮(也就是图中的三 ...
- DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案
最近在对DWZ和asp.net MVC3进行整合,其中遇到了很多问题,总算一一解决了,今天就说说题目所示的问题解决方案. 想做一个基于角色的权限管理,要对每一个Action进行权限控制.就想用DWZ的 ...
- 构建简单的json树形菜单
json结构: var Menu = [{ tit:"一级菜单", submenu:[{ tit:"二级菜单", url:"", func: ...
随机推荐
- c++最短路经典问题
一提起最短路,各位oier会想到什么呢? floyd,spfa,dij,或是bellman-ford? 其实,只要学会一种算法,大部分最短路问题就能很快解决了. 他就是堆优化的dijkstra. 首先 ...
- bzoj2115(线性基)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 题意:求图中路径1~n上最大边权 xor 和 思路:参见 blog http://b ...
- 51nod1228 序列求和(伯努利数)
题面 传送门 题解 \(O(n^2)\)预处理伯努利数 不知道伯努利数是什么的可以看看这篇文章 不过这个数据范围拉格朗日差值应该也没问题--吧--大概-- //minamoto #include< ...
- Reviewing notes 1.1 of Advanced algebra
♦Linear map Definition Linear map A linear map from vector space V to W over a field F is a function ...
- Elements in iteration expect to have 'v-bind:key' directives错误的解决办法
一.错误如下 [eslint-plugin-vue][vue/require-v-for-key]Elements in iteration expect to have 'v-bind:key' d ...
- TX2 默认root用户启动
Jetpack3.1 修改方式 修改1 gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 修改后: 修改2 gedit /root/.pro ...
- Qt 学习之路 2(49):自定义只读模型
Qt 学习之路 2(49):自定义只读模型 豆子 2013年5月5日 Qt 学习之路 2 18条评论 model/view 模型将数据与视图分割开来,也就是说,我们可以为不同的视图,QListView ...
- Takari Extensions for Apache Maven (TEAM)
http://takari.io/book/index.html TEAM stands for the Takari Extensions for Apache Maven. TEAM is a c ...
- 原生JS实现返回顶部和滚动锚点
;(function (window,doc,undefined) { function rollingAnchor(){ this.timer =''; } rollingAnchor.protot ...
- python学习之路---day09
函数案例: return 可以终止函数后面的调用 def abc() print("1") print("2") print("3") pr ...