[免费]基于Python的Flask+Vue物业管理系统【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的基于Python的Flask+Vue物业管理系统【论文+源码+SQL脚本】,分享下哈。

项目视频演示

https://www.bilibili.com/video/BV1AEqpBFExf/

项目介绍

本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。

系统展示

部分代码

复制代码
import logging

from flask import Blueprint, request

from extensions import db
from util.make_menu_tree import build_menu_tree
from menu.model import SysMenu

from util.security import permission_required
from util.status_code import response, SUCCESS_CODE, ERROR_CODE

menu_print = Blueprint('menu_print',__name__,url_prefix='/api/menu')


logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


def to_list_(menu):
    dict_users = {
        "menu_id": menu.get("menuId"),
        "parent_id": menu.get("parentId"),
        "menu_label": menu.get("menuLabel"),
        "menu_code": menu.get("menuCode"),
        "name": menu.get("name"),
        "path": menu.get("path"),
        "url": menu.get("url"),
        "type": menu.get("type"),
        "icon": menu.get("icon"),
        "order_num": menu.get("orderNum"),
        "remark": menu.get("remark"),
        "parent_name": menu.get("parentName")
    }
    return dict_users


@menu_print.route('/list',methods=['GET'])
@permission_required('sys:sysMenuList')
def get_menu_list():
    """
    查询所有菜单,并构造树形结构返回
    """
    menu_list = SysMenu.query.order_by(SysMenu.menu_id).all()
    menu_list=[x.to_list() for x in menu_list]
    res_menu_list = build_menu_tree(menu_list)
    return response("成功", SUCCESS_CODE, data=res_menu_list)

@menu_print.route('',methods=['PUT'])
@permission_required('sys:menu:edit')
def update_menu():
    """
    修改菜单
    """
    new_menu = request.get_json()
    try:
        old_menu=SysMenu.query.filter_by(menu_id=new_menu['menuId']).first()
        if old_menu:
            # 更新这条
            SysMenu.query.filter_by(menu_id=new_menu['menuId']).update(to_list_(new_menu))
            db.session.commit()
        else:
            return response("菜单不存在", ERROR_CODE)
    except:
        db.session.rollback()
        return response("修改失败", ERROR_CODE)
    return response("修改成功", SUCCESS_CODE)



@menu_print.route('<int:menu_id>',methods=['DELETE'])
@permission_required('sys:menu:delete')
def delete_menu(menu_id):
    """
    删除菜单
    """
    try:
        menu = SysMenu.query.filter_by(menu_id=menu_id).first()
        if menu:
            SysMenu.query.filter_by(menu_id=menu_id).delete()
            SysMenu.query.filter_by(parent_id=menu_id).delete()
            db.session.commit()
        else:
            return response("菜单不存在", ERROR_CODE)
    except:
        db.session.rollback()
        return response("删除失败", ERROR_CODE)
    return response("删除成功", SUCCESS_CODE)



def make_menu_tree( menus, parent_id):
    """
    递归构造树形菜单
    """
    result = []
    for menu in menus:
        if menu['parentId'] == parent_id:
            children = make_menu_tree(menus, menu['menuId'])
            if children:
                menu['children'] = children
            result.append(menu)
    return result

@menu_print.route('/parent',methods=['GET'])
@permission_required('sys:sysMenuList')
def get_parent_list():
    """
    查询上级菜单,并构造树形结构返回
    """
    # 查询符合条件的菜单,并按 order_num 升序排序
    menus = SysMenu.query.order_by(SysMenu.order_num.asc()).all()
    menus = [menu.to_list() for menu in menus]
    # 添加顶级菜单节点
    top_menu = {
        "menuId": 0,
        "parentId": -1,
        "menuLabel":"顶级菜单"
    }
    menus.append(top_menu)
    # 构造树形数据
    menu_tree = make_menu_tree(menus, -1)
    return response("成功", SUCCESS_CODE, data=menu_tree)


@menu_print.route('',methods=['POST'])
@permission_required('sys:menu:add')
def add_menu():
    """
    添加菜单
    """
    mjson = request.get_json()
    new_menu = SysMenu(
        parent_id=mjson['parentId'],
        menu_label=mjson['menuLabel'],
        menu_code=mjson['menuCode'],
        name=mjson['name'],
        path=mjson['path'],
        url=mjson['url'],
        type=mjson['type'],
        icon=mjson['icon'],
        remark=mjson['remark'],
        parent_name=mjson['parentName'],
    )
    try:
        db.session.add(new_menu)
        db.session.commit()
        return response("添加成功", SUCCESS_CODE, data=new_menu.to_list())
    except Exception as e:
        print(e)
        db.session.rollback()
        return response("添加失败", ERROR_CODE)

源码下载

链接:https://pan.baidu.com/s/1UtYnwCBwky5iOIOLUp6FYA?pwd=1234

提取码:1234

相关推荐
小则又沐风a19 小时前
负载均衡式在线OJ---------第二幕
linux·c++·后端
天天爱吃肉821819 小时前
【工程师硬件学习笔记:串口‑总线体系与三电试验室异构系统集成深度实战】
大数据·笔记·python·嵌入式硬件·学习·汽车
AC赳赳老秦19 小时前
官方技术文档聚合实践:用 OpenClaw 批量抓取开源项目文档,构建离线可检索技术知识库
java·运维·服务器·python·信息可视化·deepseek·openclaw
Zenova EdgeOS19 小时前
工业边缘 SDK 设计实战:从 API 到 Python/Go 多语言工程落地
python·golang·php
不才不才不不才20 小时前
Spring 源码系列(20): @SpringBootApplication 三注解拆解
java·后端·spring
XLYcmy20 小时前
pdf论文处理:CSV输出模式
数据库·python·pycharm·pdf·论文·csv·dify
程序员爱钓鱼20 小时前
Rust 生命周期常见错误详解:看懂编译器报错并正确修复
前端·后端·rust
andongni20320 小时前
SpringBoot RESTful API 设计与实现
spring boot·后端·restful
程序员爱钓鱼20 小时前
Go if 判断详解
前端·后端·go
苏灿烤鱼20 小时前
14MB 模型,凭什么跟 270M 对打?
javascript·python·agent