pear-admin 项目结构讲解

上一篇文章介绍了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.mzph.cn/news/773289.shtml

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

相关文章

vue实现文字一个字一个字的显示(开箱即用)

图示&#xff1a; 核心代码 Vue.prototype.$showHtml function (str, haveCallback null) {let timeFlag let abcStr for (let i 0; i < str.length; i) {(function (i) {timeFlag setTimeout(function () {abcStr str[i]haveCallback(abcStr)if ((i 1) str.length…

EPSON推出的实时时钟模块RX8130CE功耗低至300nA、从容应对各种使用场景

随着科技的进步和消费者需求的不断变化&#xff0c;笔记本电脑市场继续展现出强劲的发展势头一方面移动性和轻薄性成为主流&#xff0c;另外一方面性能在不断提升&#xff0c;功能也日益丰富。实时时钟模组&#xff0c;作为提供时间和定时功能的单元模块&#xff0c;是笔记本电…

解决错误LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to

react native pod第三方包或者git clone的时候遇到 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443两种解决方案 方法一 修改计算机网络配置 由于使用 IPv6 的原因&#xff0c;可能会导致这一问题的出现 系统在解析hostname时使用了ipv6 可以配…

【工具】秘塔AI搜索|强烈推荐,中文免费搜索神器!堪比做报表的员工

网址&#xff1a;https://metaso.cn/ 使用时间&#xff1a;2024/03/27 以前其实用过它家的秘塔写作猫&#xff0c;当时感觉非常不错。 这次看到它出AI搜索&#xff0c;感觉开发者挺有野心和实力的。 推荐原因&#xff1a; 国产产品&#xff0c;中文适用性强。目前还免费。【不…

工业镜头常用参数之实效F(Fno.)和像圈

Fno. 工业镜头中常用到的参数F&#xff0c;有时候用F/#&#xff0c;Fno.来表示&#xff0c;指的是镜头通光能力的参数。它可用镜头焦距及入瞳直径来表示&#xff0c;也可通过镜头数值孔径&#xff08;NA&#xff09;和光学放大倍率&#xff08;β&#xff09;来计算。有效Fno.…

IDEA使用常用的设置

一、IDEA常用设置 可参考&#xff1a;IDEA这样配置太香了_哔哩哔哩_bilibili 波波老师 二、插件 可参考&#xff1a;IDEA好用插件&#xff0c;强烈推荐_哔哩哔哩_bilibili 波波老师 三、其他 学会用点“.” IDEA弹窗Servers certificate is not trusted怎么禁止&#xf…

计算机视觉之三维重建(4)---三维重建基础与极几何

文章目录 一、三维重建基础1.1 问题引入1.2 线性解法1.3 非线性解法1.4 多视图几何的关键问题 二、极几何与基础矩阵2.1 极几何2.2 极几何特例2.3 本质矩阵2.4 本质矩阵的性质2.5 基础矩阵2.6 基础矩阵的性质 三、基础矩阵估计 一、三维重建基础 1.1 问题引入 1. 从单张图像恢…

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

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

QT+Opencv+yolov5实现监测

功能说明&#xff1a;使用QTOpencvyolov5实现监测 仓库链接&#xff1a;https://gitee.com/wangyoujie11/qt_yolov5.git git本仓库到本地 一、环境配置 1.opencv配置 将OpenCV-MinGW-Build-OpenCV-4.5.2-x64文件夹放在自己的一个目录下&#xff0c;如我的路径&#xff1a; …

Spark SQL— Catalyst 优化器

Spark SQL— Catalyst 优化器 1. 目的 本文的目标是描述Spark SQL 优化框架以及它如何允许开发人员用很少的代码行表达复杂的查询转换。我们还将描述Spark SQL如何通过大幅提高其查询优化能力来提高查询的执行时间。在本教程中&#xff0c;我们还将介绍什么是优化、为什么使用…

蓝桥杯练习系统(算法训练)ALGO-967 共线

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 给定2维平面上n个整点的坐标&#xff0c;一条直线最多能过几个点&#xff1f; 输入格式 第一行一个整数n表示点的个数   …

STM32 使用gcc编译介绍

文章目录 前言1. keil5下的默认编译工具链用的是哪个2. Arm编译工具链和GCC编译工具链有什么区别吗&#xff1f;3. Gcc交叉编译工具链的命名规范4. 怎么下载gcc-arm编译工具链参考资料 前言 我们在STM32上进行开发时&#xff0c;一般都是基于Keil5进行编译下载&#xff0c;Kei…

区块链安全之DDoS防护的重要性及其实施策略

随着区块链技术的不断发展和广泛应用&#xff0c;其安全问题也日益凸显。其中&#xff0c;分布式拒绝服务(DDoS)攻击是对区块链网络稳定性和效率构成潜在威胁的重要因素之一。本文旨在深入探讨区块链为何需要采取DDoS高防措施&#xff0c;并提出相应的防护策略。 一、区块链面…

博客系统——3、数据库表设计 - 博客标签表

任务描述 本关任务&#xff1a;在博客数据库中建立博客标签表。 相关知识 多对多关系的建立 每一个博客都可以设置很多个标签&#xff0c;比如一篇讲JavaWeb知识的博客&#xff0c;就可能会涉及到多个标签如&#xff1a;前端、后端、Java、SpringMVC等标签&#xff0c;而一…

碳课堂|什么是碳资产?企业如何进行碳资产管理?

碳资产是绿色资产的重要类别&#xff0c;在全球气候变化日益严峻的背景下备受关注。在“双碳”目标下&#xff0c;碳资产管理是企业层面实现碳减排目标和低碳转型的关键。 一、什么是碳资产&#xff1f; 碳资产是以碳减排为基础的资产&#xff0c;是企业为了积极应对气候变化&…

Kubernetes示例yaml:1. service-deployment.yaml

service-deployment.yaml 示例 apiVersion: apps/v1 kind: Deployment metadata:name: example-plusnamespace: aaaalabels:app: example-prdapp_unit: AAAA-EXAMPLE spec:replicas: 2selector:matchLabels:app: example-prdtemplate:metadata:labels:app: example-prdapp_uni…

常见位运算的总结

目录 一、基础位运算 二、给一个数n&#xff0c;确定它的二进制中的第x位是0还是1 三、将一个数n的二进制表示的第x位修改成1 四、将一个数n的二进制位表示的第x位修改成0 五、位图思想 六、提取一个数(n)二进制表示中最右侧的1(lowbit) 七、干掉一个数n的最右侧的1 八、…

1.5T数据惨遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件93起&#xff0c;近三周攻击数量呈现持平状态。 本周Lockbit3.0是影响最严重的勒索家族&#xff0c;Blacksuit和Ransomhub恶意家族紧随其后&#xff0c;从整体上看Lockbit3.0依旧是影响最严重的勒索家族&#xff0c;需要注意防范。 …

神经网络代码实现(用手写数字识别数据集实验)

目录 一、前言 二、神经网络架构 三、算法实现 1、导入包 2、实现类 3、训练函数 4、权重参数矩阵初始化 5、参数矩阵变换向量 6、向量变换权重参数矩阵 7、进行梯度下降 7.1、损失函数 7.1.1、前向传播 7.2、反向传播 8、预测函数 四、完整代码 五、手写数字识别 一、前言 …

LVS负载均衡(load balance)

一 LVS LVS&#xff1a;Linux Virtaul Server&#xff0c;该软件的功能是实现 LB&#xff08;load balance&#xff09; 二LVS 的三种工作模式 1.NAT 模式&#xff08;NAT&#xff09; LVS 服务器同时充当一台 NAT 网关&#xff0c;拥有公有 IP &#xff0c;同时负责将针对此…