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强化延时任务,完成服务器系统延时任务请求的闭环。

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

相关推荐

  1. 基于pear-admin-flask 的 flask 使用教程

    2024-03-27 10:02:02       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 10:02:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 10:02:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 10:02:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 10:02:02       20 阅读

热门阅读

  1. Element Plus快速入门及常用组件

    2024-03-27 10:02:02       16 阅读
  2. 北航2023年考研机试题

    2024-03-27 10:02:02       16 阅读
  3. centOS 安装MySQL8.0

    2024-03-27 10:02:02       20 阅读
  4. Spring Boot的作用

    2024-03-27 10:02:02       16 阅读
  5. ChatGPT革新:打造高质量学术论文

    2024-03-27 10:02:02       24 阅读
  6. HTTP和HTTPS的区别

    2024-03-27 10:02:02       19 阅读
  7. ChatGPT之道:AI与编程的完美融合

    2024-03-27 10:02:02       18 阅读
  8. 软件工程---软件设计模式和软件体系结构

    2024-03-27 10:02:02       15 阅读
  9. Node.js 的常用命令详解

    2024-03-27 10:02:02       19 阅读
  10. 一些常用的Node.js命令

    2024-03-27 10:02:02       20 阅读
  11. PHP记录日志

    2024-03-27 10:02:02       15 阅读
  12. vue响应式基础

    2024-03-27 10:02:02       15 阅读
  13. Netty空闲检测&Keepalive

    2024-03-27 10:02:02       17 阅读
  14. dijkstra算法及模板题

    2024-03-27 10:02:02       18 阅读
  15. pytorch | pytorch改变tensor维度的方法

    2024-03-27 10:02:02       20 阅读
  16. 前端学习-CSS基础-Day1

    2024-03-27 10:02:02       14 阅读