1.概述
首先,我们创建一个新的路由(模仿user创建就好)。
在菜单界面,我们需要通过后端把数据库的数据调取出来,并且我们还需要获取成树级结构
2.实现
2.1此时的结构
2.2代码展示
- 初始化
# flask_shop/menu/__init_.py
# menu用于管理用户的蓝图
from flask import Blueprint
# 注册flask_restful路由
from flask_restful import Api
# 创建蓝图,记得要注册
#定义好传递给的变量 蓝图对象名称 前缀名
menu = Blueprint('menu', __name__)
# 注册flask_restful路由
menu_api = Api(menu)
from flask_shop.menu import view
- 视图
# flask_shop/menu/view.py
from flask import request
from flask_shop.menu import menu,menu_api
from flask_shop import models,db
from flask_restful import Resource
class Menu(Resource):
def get(self):
type_ = request.args.get('type')
menu_list = []
if type_ == 'list':
# 获取数据,并将数据填充到menu_list
mu = models.Menu.query.filter(models.Menu.level != 0).all()
for m in mu:
menu_list.append(m.to_dict())
# type是想转化的格式
else:
mu = models.Menu.query.filter(models.Menu.level == 1).all()
print("mu:",mu)
for m in mu:
print("m:",m)
# 获取1级菜单转成json
first_mu = m.to_dict()
# 给二级菜单创建保存容器
first_mu['children'] = []
for sm in m.children:
print("sm:",sm)
# 获取2级菜单转成json
secd_dict = sm.to_dict()
# 给2级菜单创建保存容器,并把3级菜单数据加进来
secd_dict['children'] = sm.get_child_list()
# 把2级单级菜单加到1级的children列表中
first_mu['children'].append(secd_dict)
# 把1级单级菜单加到根列表中
menu_list.append(first_mu)
return menu_list
menu_api.add_resource(Menu, '/menu')
- 注册路由
#flask_shop/__init__.py
# 用于初始化app对象
from flask import Flask
# 导入数据库
from flask_sqlalchemy import SQLAlchemy
# 获取是哪种开发模式
from config import config_map
# 先不连接app对象,否则报错,在下面创建app对象时默认连接数据库,就可以了
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
# 获取到字典中的哪种类,获取到对应的类名,再给到from_object获取到对应的参数
obj = config_map.get(config_name)
# 加载数据库到Flask中
app.config.from_object(obj)
# 默认连接数据库
db.init_app(app)
# 注册用户的蓝图
# 不可以把这一行放到开头,否则会执行回init,再引用回来会需要创建db,产生报错
from flask_shop.user import user
app.register_blueprint(user)
from flask_shop.menu import menu
app.register_blueprint(menu)
return app
3.为什么使用循环不适用递归
- 递归对运算消耗量非常大
- 此时的层级只有三层