36.(后端)菜单接口逻辑实现

1.概述

首先,我们创建一个新的路由(模仿user创建就好)。
在菜单界面,我们需要通过后端把数据库的数据调取出来,并且我们还需要获取成树级结构

2.实现

2.1此时的结构

在这里插入图片描述

2.2代码展示

  1. 初始化
# 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

  1. 视图
# 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')
  
  1. 注册路由
#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.为什么使用循环不适用递归

  1. 递归对运算消耗量非常大
  2. 此时的层级只有三层
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值