【Python开发】Flask项目的组织架构

2023/9/30 18:17:10

Flask项目的组织架构

在大型Flask项目中,主要有三种常见的项目组织架构:功能式架构(也就是 Bluelog 程序使用的架构)、分区式架构和混合式架构。我们将以一个示例程序 myapp 作为示例来介绍这三种架构的特点和区别,这个程序按照功能主要分为三部分:前台页面 front、认证 auth、后台管理 dashboard,为每个部分创建一个蓝本。

1.功能式架构

在功能式架构中,程序包由各个代表程序组件(功能)的子包组成,比如 blueprints(蓝本)、forms(表单)、templates(模板)、models(模型)等,在这些子包中,按照程序的板块分模块来组织代码,比如 forms 子包下包含 front.pyauth.pydashboard.py。这种架构结构清晰,更容易在开发时让开发者迅速找到文件,其他维护者也能迅速了解程序结构。使用功能式架构的程序包目录结构示意如下。

在这里插入图片描述

因为程序比较简单,蓝本主要是用来组织路由,所以项目中的蓝本直接在 blueprints 包下的模块中创建。如果蓝本需要注册更多的处理程序,比如错误处理函数、请求处理函数等,可以在 blueprints 包中为每个蓝本创建单独的子包,目录结构示意如下所示:

在这里插入图片描述

通过为蓝本创建子包还可以支持为蓝本创建独立的 templatesstatic 文件夹:

在这里插入图片描述

和在单模块中创建蓝本不同,当在子包中创建蓝本时,为了方便其他模块导入蓝本对象,这时蓝本对象在蓝本子包的构造文件中创建。而且,因为蓝本在构造文件中定义,为了把路由、错误处理器、请求处理函数等和蓝本对象关联起来,需要在构造文件中导入这些模块。为了避免循环依赖,在构造文件的底部添加这些导入语句。

在这里插入图片描述
在路由模块等要使用蓝本对象的地方可以直接导入这里创建的蓝本对象。

在这里插入图片描述

2.分区式架构

在分区式架构中,程序被按照自身的板块分成不同的子包。myapp 使用分区式架构可以分别创建frontauthdashboard 三个子包,这些子包直接在程序包的根目录下创建,子包中使用模块组织不同的程序组件,比如 views.pyforms.py 等。这种分类自然决定了每一个子包都对应着一个蓝本,这时蓝本在每个子包的构造文件中创建。使用分区式架构的程序包目录结构示意如下所示:

在这里插入图片描述

3.混合式架构

混合式架构,顾名思义,就是不按照常规分类来组织。比如,采用类似分区式架构的子包来组织程序,但各个蓝本共用程序包根目录下的模板文件夹和静态文件文件夹。

在这里插入图片描述
或是某个蓝本采用分区式架构单独组织,其他蓝本则使用功能式架构统一放到 blueprints 子包中。

4.如何选择?

不同类型的程序适合不同的组织方式。一般来说,如果程序各个功能之间联系较为紧密,我们可以采用功能式组织方式,反之则适合采用分区式架构。

比如,一个社交程序的 程序本身、后台管理、公司博客、API文档 是功能设计和页面样式都相对独立的四部分,各个部分都会使用自己的模板、静态文件、错误处理器等,这时则更适合使用分区式架构。


http://www.jnnr.cn/a/133962.html

相关文章

企业微信自定义客户画像

OpenAPI基本介绍 微伴助手开放接口对接文档 version: 0.4 注1:微伴助手开放接口已经开放公测,进入微伴后台-应用管理-API接入以获取企业标识(corp_id) ,企业API调用凭据(secret) 注2&#xff…

java面试强基(3)

重载和重写的区别? 重载 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同。 重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。 重写 重写发生在运行期,…

【CSDN|每日一练】求最小元素

目录 运行结果题目描述输入描述:输出描述:示例代码结语运行结果 题目描述 Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). Find the minimum element. You may a…

当光伏巡检走向全自动化

作者 | 曾响铃 文 | 响铃说 无数的太阳能面板组成光伏发电的海洋,在烈日下矗立,为了保证它们正常运行,电站必须安排人力巡查,一块块面板全面检查,周而复始。 在光伏发电高速发展的这些年,这一幕已经成为…

彩印图文版《Elasticsearch实战》文档,阿里内部共享,堪称精品

学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生的时候…

在Windows上使用Docker搭建ChirpStack私有LoRa服务端

在Windows上使用Docker容器部署ChirpStack服务,首先若要在Windows 10或11 上运行容器,需要以下条件: 一个运行 Windows 10 或 11 专业版或企业版的物理计算机系统。Hyper-V 功能已启用。 Windows下的Docker安装 1.Docker为Windows提供了一款…

小啊呜产品读书笔记001:《邱岳的产品手记-02》开篇词010203讲

小啊呜产品读书笔记001:《邱岳的产品手记-02》 开篇词&01&02&03讲一、今日阅读计划二、泛读&知识摘录1、开篇词 产品经理的世界没有对错2、01讲 验证码是个好设计吗?3、02讲 产品经理工具指南4、03讲 产品案例分析Trigraphy的设计哲学三…

Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)

Unity 之 实现月签到累计签到一,签到效果二,实现步骤2.1 场景搭建2.2 创建配置2.3 编写代码三,拓展:入场动画一,签到效果 实现效果: 二,实现步骤 2.1 场景搭建 创建Image设计为大背景&…

【数据结构初阶】(栈和队列)图文详解四道oj+三道easy概念题

你也会感到孤独吗? 文章目录一、队列和栈的接口二、有效的括号2.1 思路呈现2.2 代码呈现细节讲解三、用队列实现栈3.1 思路呈现3.2 代码呈现细节讲解3.3 总结四、用栈实现队列4.1 思路呈现4.2 代码呈现细节讲解4.3 总结五、设计循环队列5.1 思路呈现5.2 数组5.3 链表…

Android App 导出APK安装包以及制作App图标讲解及实战(图文解释 简单易懂)

操作有问题请点赞关注收藏后评论区留言~~~ 一、导出APK安装包 之前在运行App的时候,都是先由数据线连接手机和电脑,再通过Android Studio的Run菜单把App安装到手机上,这种方式只能在自己手机上调试应用,如果想在别人手机上安装应…

【毕业设计】后端实现——设计数据库并存储数据

🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。 前言: 🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~ ✨个…

学好MySQL增删查改,争取不做CURD程序员【下篇(六个小时肝MySQL万字大总结)】

✨✨hello,愿意点进来的小伙伴们,你们好呐! 🐻🐻系列专栏:【MySQL初阶】 🐲🐲本篇内容:一套打通MySQL基础操作. 🐯🐯作者简介:一名现大二的三非编…

在Jeston NX上部署运行PaddleOCR教程(安装whl包方法)

文章目录基本概念介绍1.确定盒子环境pythonCUDAcuDNNTensorRT版本1.1 我还没有安装环境:一步到位整体安装1.2 我已经安装了环境:查询盒子环境版本1.3 默认python版本设置2.安装PaddlePaddle3. 安装PaddleOCR4. 运行例程5. 后续工作附:参考教程…

Android 录音没有声音,设置AudioSource.VOICE_CALL直接MediaRecorder.start异常等系列问题

一、我的需求:来电后,我的三方应用主动开启录音,挂断后结束录音,查验音频 我遇到的问题:录制的音频没有声音。 通过各种尝试,结果如下 :设置不同的录音来源的效果 MediaRecorder API\创建MediaR…

【Egg从基础到进阶】一:Egg项目初始化及基础入门

目录 Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。 使用Egg 脚手架创建一个Egg项目 node > 14.20.0 app/router app/controller/XX app/service/xx app/middleware/xx ap…

ESP8266--Arduino开发(驱动WS2812B)

文章目录一、WS2812彩灯介绍二、安装Adafruit_NeoPixel驱动库三、Adafruit_NeoPixel库常用接口四、使用示例五、网页端控制WS2812B灯带实例一、WS2812彩灯介绍 WS2812是一个集控制电路与发光电路于一体的智能外控LED光源,外型与5050LED灯珠相同,每个灯珠…

Design A Youtube

title: Notes of System Design No.05 — Design a Youtube description: ‘Design a Youtube’ date: 2022-05-14 13:45:37 tags: 系统设计 categories: 系统设计 01. Funtional Requirements 02. Non Functional Requirements 03.Assumption 04 API 05 High Level Design 上…

多云管理平台发展的几个阶段

多云管理平台能够无差别地提供统一的资源管理、业务能力和运行维护等功能,从而可以屏蔽掉底层云资源池的差异性,大大降低了用户的建设成本和运行维护成本,因此也是目前算力网络异构云资源池统一管理的主流建设方案。 自Gartner首次提出多云管…

数字化转型重塑企业竞争优势,SaaS电商系统助力锂电池行业实现降本增效

作为我国核心基础工业的关键材料之一,锂电池在汽车、医疗器械、航天航空、消费类电子产品等领域均可发挥重要作用。近年来,随着新能源汽车的快速发展有力带动了锂电池行业的市场需求,锂电池已成为化学电源应用领域中最具竞争力的电池&#xf…

上海亚商投顾:A股缩量调整 AIGC、Web3.0概念抢眼

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪三大指数今日震荡调整,深成指、创业板指午后均跌超1%,黄白二线有所分化,科创50指…
最新文章