pear-admin 项目结构讲解

news2024/12/23 4:20:03

上一篇文章介绍了pear-admin用到flask的技术, 深入代码后发现其结构也是令人眼前一亮, 结构化,模块化, 解耦做得非常优秀。

  1. 整个项目数据库使用migrate做了版本管理, 使用marshmallow做了序列化,这样数据库修改也非常好迁移,对后面的代码在使用数据库将非常简单。
    数据库实现 @3ds/pear-admin-flask/applications/models/init.py
class Dept(db.Model):
    __tablename__ = 'admin_dept'
    id = db.Column(db.Integer, primary_key=True, comment="部门ID")
    parent_id = db.Column(db.Integer, comment="父级编号")
    dept_name = db.Column(db.String(50), comment="部门名称")
    sort = db.Column(db.Integer, comment="排序")
    leader = db.Column(db.String(50), comment="负责人")
    phone = db.Column(db.String(20), comment="联系方式")
    email = db.Column(db.String(50), comment="邮箱")
    status = db.Column(db.Integer, comment='状态(1开启,0关闭)')
    remark = db.Column(db.Text, comment="备注")
    address = db.Column(db.String(255), comment="详细地址")
    create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
    update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')

序列化实现 @3ds/pear-admin-flask/applications/schemas/init.py

class DeptSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = Dept  # table = models.Album.__table__
        # include_relationships = True  # 输出模型对象时同时对外键,是否也一并进行处理
        include_fk = True  # 序列化阶段是否也一并返回主键
        # fields= ["id","name"] # 启动的字段列表
        # exclude = ["id","name"] # 排除字段列表

  1. 整个项目的配置抽取到集中管理配置的config.py中, 结构分为组件(plugs),蓝图(Blueprint),命令(script)几部分。
def create_app():
    app = Flask(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
    # 引入配置
    app.config.from_object(BaseConfig)

    # 注册flask组件
    init_plugs(app)

    # 注册蓝图
    init_bps(app)

    # 注册命令
    init_script(app)

    return app

a. 组件是一些集成到项目中的附加功能的定义, 通过 @3ds/pear-admin-flask/applications/extensions/init.py 中管理, 手动添加 初始化的 init 函数。原项目中有登陆,邮箱等组件的初始化。

def init_plugs(app: Flask) -> None:
    init_login_manager(app)
    init_databases(app)
    init_template_directives(app)
    init_error_views(app)
    init_mail(app)
    init_upload(app)
    init_migrate(app)
    init_session(app)

b. 蓝图是对服务器接口的实现,主要有两个部分, 一个部分是集成的服务器接口, 另外还添加了一个接口插件功能, 可以通过config.py 中的 P L U G I N E N A B L E F O L D E R S PLUGIN_ENABLE_FOLDERS PLUGINENABLEFOLDERS 变量外部动态添加插件。其在 @3ds/pear-admin-flask/applications/view/init.py 中管理。

def init_bps(app):
    register_system_bps(app) # 系统接口
    register_plugin_views(app) # 插件的遍历程序

添加配件的方法是 在@3ds/pear-admin-flask/applications/config.py 的 P L U G I N E N A B L E F O L D E R S PLUGIN_ENABLE_FOLDERS PLUGINENABLEFOLDERS 中 添加plugins实现好的插件目录。如下我添加官方自带的 r e p l a c e P a g e replacePage replacePage

PLUGIN_ENABLE_FOLDERS = ['replacePage']

在这里插入图片描述

c. 命令是可以通过 flask 命令行命令进行执行的, 主要是通过上一篇文中介绍的 A p p G r o u p AppGroup AppGroup 实现的。管理脚本在 @ 3ds/pear-admin-flask/applications/common/script/init.py 中,可自行修改。

def init_script(app: Flask):
    app.cli.add_command(admin_cli)
  1. 部署配置上, pear-admin 项目也是做得比较齐全,有运行的readme说明, 准备了 run.sh 脚本, 还有一件部署的 docker 套餐。 总之通过项目提供的资料要把项目跑起来还是比较简单。

PS:我这里说下, 如果大家对社区有了解的话,docker已经远离开源了,大家可以使用 nerdctl 替代docker.后面还可以用sealos上k8s项目。具体我在 容器原来发生了这么多事情 中有介绍。

我个人认为项目还需要优化的地方。

  1. 日志系统还可以优化一下, 使用统一日志输出有助于后期维护,日志不用写在数据库中,写在数据库中可能会影响日志迁移等功能的效率。
  2. 使用flask-rustx 项目对结构可以再进一步优化,对后期的项目理解会更好。
  3. 使用celery强化延时任务,完成服务器系统延时任务请求的闭环。

最近发现了好多国内开源的好项目, 慢慢消化一下,大家有什么意见可以在评论区讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1547637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STL —— string(3)

目录 1. 使用 1.1 c_str() 1.2 find() & rfind() 1.3 substr() 1.4 打印网址的协议域名等 1.5 find_first_of() 2. string() 模拟实现 2.1 构造函数的模拟实现 2.2 operator[] 和 iterator 的模拟实现 2.3 push_back() & append() & 的模拟实现 2.4 ins…

C语言运算符优先级介绍

1. 引言 什么是运算符 运算符是编程中用于执行算术、比较和逻辑操作的符号。它们是构建表达式的基本工具&#xff0c;类似于数学中的加、减、乘和除。 程序片段示例: 简单的算术运算符使用 #include <stdio.h>int main() {int a 5, b 2;int sum a b; // 使用加法…

发车,易安联签约某新能源汽车领军品牌,为科技创新保驾护航

近日&#xff0c;易安联成功签约某新能源汽车领军品牌&#xff0c;为其 数十万终端用户 建立一个全新的 安全、便捷、高效一体化的零信任终端安全办公平台。 随着新能源汽车行业的高速发展&#xff0c;战略布局的不断扩大&#xff0c;技术创新不断引领其市场价值走向高点&am…

计算机网络——数据链路层(差错控制)

计算机网络——数据链路层&#xff08;差错控制&#xff09; 差错从何而来数据链路层的差错控制检错编码奇偶校验码循环冗余校验&#xff08;CRC&#xff09;FCS 纠错编码海明码海明距离纠错流程确定校验码的位数r确定校验码和数据位置 求出校验码的值检错并纠错 我们今年天来继…

C#打印50*30条码标签

示例图&#xff1a; 源码下载地址&#xff1a;https://download.csdn.net/download/tiegenZ/89035407?spm1001.2014.3001.5503

【Java程序设计】【C00379】基于(JavaWeb)Springboot的旅游服务平台(有论文)

【C00379】基于&#xff08;JavaWeb&#xff09;Springboot的旅游服务平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c…

STM32F103 CubeMX 使用USB生成键盘设备

STM32F103 CubeMX 使用USB生成键盘设备 基础信息HID8个数组各自的功能 生成代码代码编写添加申明信息main 函数编写HID 修改1. 修改报文描述符2 修改 "usbd_hid.h" 中的申明文件 基础信息 软件版本&#xff1a; stm32cubmx&#xff1a;6.2 keil 5 硬件&#xff1a;…

【剑指offer】顺时针打印矩阵

题目链接 acwing leetcode 题目描述 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 数据范围矩阵中元素数量 [0,400]。 输入&#xff1a; [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出&#xff1a;[1,2,3,4,8,12,11,10,9,5,6,7] 解题 …

MySQL【三】操作数据库基础

库、表、记录的概念 库&#xff08;Database&#xff09;&#xff1a;库是一个容器&#xff0c;用于存储表和其他对象&#xff08;如视图、存储过程等&#xff09; 表&#xff08;Table&#xff09;&#xff1a;表是一个由列和行组成的矩阵&#xff0c;其中每列都定义了表中的…

MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误

参考MQTT.fx和MQTTX 链接ONENET物联网开发平台避坑细节干货。_mqttx和mqttfx-CSDN博客 在输入password和username后还是提示错误&#xff0c;是因为在使用token的时候&#xff0c;key填写错误&#xff0c;将设备的密钥填入key中

webpack练习之手写loader

手写一个style-loader来把样式文件插入head里面&#xff0c;准备工作 vue webpack就自己弄了&#xff0c;webpack的一些配置也自己配置好 一、创建index.css文件 .box{width: 100px;height: 100px;background-color: red; }然后在vue的main.js文件中引入它 二、创建自定义l…

MyBatis-Plus分页接口实现教程:Spring Boot中如何编写分页查询

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

港大新工作 HiGPT:一个模型,任意关系类型 !

论文标题&#xff1a; HiGPT: Heterogeneous Graph Language Model 论文链接&#xff1a; https://arxiv.org/abs/2402.16024 代码链接&#xff1a; https://github.com/HKUDS/HiGPT 项目网站&#xff1a; https://higpt-hku.github.io/ 1. 导读 异质图在各种领域&#xf…

云原生靶场kebernetesGoat、Metarget

靶场 文章目录 靶场kebernetesGoat靶场安装Docker in DockerSSRF漏洞容器逃逸到主系统Docker CIS 基线分析Kubernetes CIS 安全基线分析分析被部署挖矿软件的容器镜像获取环境信息Hidden in layersRBAC最低权限配置错误使用 Sysdig Falco 进行运行时安全监控和检测 Metarget ke…

UE5、CesiumForUnreal实现海量POI撒点显示与聚合功能

1.实现目标 POI是UE+GIS三维场景中经常需要展示的要素,在UE中常用的表示POI方法有两种。一种是Mesh,即空间的方式;另一种是Widget,即屏幕上的方式,本文这里使用的是Widget屏幕展示的形式来表示POI。 本文这里使用的POI点位数量共3.3w+,采用直接网格聚合算法,并进行性能优…

ROS机器人入门第四课:话题通信

文章目录 ROS机器人入门第四课&#xff1a;话题通信一、话题通信概述&#xff08;一&#xff09;概念&#xff08;二&#xff09;作用 二、话题通信基本操作需求:分析:流程:&#xff08;一&#xff09;发布方解释一些关键的ROS函数和概念&#xff1a; &#xff08;二&#xff0…

2024年福建事业单位招聘详细流程

2024年福建事业单位招聘详细流程&#xff0c;速速查收&#xff01;

湖北汽车工业学院 实验一 关系数据库标准语言SQL

头歌 实验一 关系数据库标准语言SQL 制作不易&#xff01;点个关注呗&#xff01;为大家创造更多的价值&#xff01; 目录 头歌 实验一 关系数据库标准语言SQL**制作不易&#xff01;点个关注呗&#xff01;为大家创造更多的价值&#xff01;** 第一关&#xff1a;创建数据库第…

简单服务器通信、IO多路复用(select、poll、epoll)以及reactor模式。

网络编程学习 简单服务器通信TCP三次握手和四次挥手三次握手&#xff08;如下图&#xff09;常见问题&#xff1f; 四次挥手 client和server通信写法server端client端 通信双方建立连接到断开连接的状态转换怎么应对多用户连接&#xff1f;缺点 IO多路复用select优缺点 pollpol…

算法---动态规划练习-5(下降路径最小和)

下降路径最小和 1. 题目解析2. 讲解算法原理方法一方法二 3. 编写代码法一法二 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 方法一 首先&#xff0c;通过matrix的大小确定矩阵的行数m和列数n。 创建一个大小为(m1) (n2)的二维动态规划数组dp&#xff0c;其中d…