智一面

平时无论是聊技术还是面试我想大家或多或少都会说,我的这个项目是基于 Django 框架开发的、基于 Tornado 框架开发的... 面试官也会问你这个项目是基于哪个框架开发的呢?每次问到这个问题的时候你是否会停下来思考两秒为何大家都会这样问在,这样说呢?用过多个 python web 框架的的同学应该清楚:在使用 Django 这种框架的时候我们是可以通过命令创建出一个项目的 项目中各个文件包含的内容也是有严格规定的,但是在使用类似于 flask、fastapi 的时候我们在官网或者网上找一个例子就会发现启动一个项目就简简单单的一个 py 文件就能完成请求和响应内容,是太简单了么?不是的 这些轻量级的框架项目组织需要我们自己来做,这里问题就来了,有些开发人员在规划的时候由于不合理而在后续开发、找问题... 等过程中让人绝望。基于此我分享一份在开发中如何合理规划项目的案例供大家学习参考

注:这篇文章核心是介绍 python 轻量级项目组织相关的问题,本案例不是标准,只是在多年的开发过程中总结的一套比较舒服、高效的组织代码的一种方式,只是单纯分享,不是强制。

1

fastapi 总体项目结构

我们大体把项目的目录结构划分为 5 个部分,分别为:app、docs、requirements、scripts、tests 。简单的介绍一下这几部分的核心功能:app:项目框架核心,做整体项目逻辑
docs:项目文档维护
requirements:维护项目的第三方安装包
scripts:对项目代码质量做检测的脚本
tests:测试案例
我们先看一下整体的图示:

2

fastapi 各个部分详解

2.1

app 部分

这部分是承载我们整个项目的所以涉及的内容会更多些,我们一起看一下:
dependencies:一般会放置登陆校验、请求参数清洗等内容 做到依赖注入处理
fastapi_learn:这个是我们的项目文件,比如你的项目名称为:xxx_app 则这个文件夹就是 xxx_app 在这个文件夹中方的一般都是全局的配置文件信息
libs:一般存放的是我们自己抽象出来的公共类库或则根据业务场景抽象出来可以复用的一些工具类
managers:这个文件存放的基本都是操作数据库相关处理业务的复杂业务逻辑基本都会在这里处理
middlewares:这个文件主要存放我们的自定义的中间件,比如我们有些公共的中间件做限流的、做分流的都可以在这个文件夹中得以体现
responses:这个文件主要是对我们返回给前端、客户端的接口数据结构进行格式化和自定义处理
routes:这个文件件主要是我们的路由转发,对来自前端、客户端的请求进行转发的入口
schemas:这个文件主要存放的是我们各个接口的入参、出参的各个字段的类型进行定义
utils:这个文件也是存放一些工具方法,这个工具方法与 libs 核心区别是: libs 中的东西变更频率比 utils 低的多
config.py:这个单独文件主要是放置我们的配置信息
log_settings.py:这个单独文件主要是放置我们关于日志的配置文件
main.py:这个单独文件是我们项目启动的核心文件,我们的项目就是用这个文件启动的

2.2

docs 部分

这部分主要是承载我们整个项目的文档的文件,比如你现在涉及了一个用户表结构,怎么记录呢?你就可以在这个文件中建立一个 create_user_table_sql.md 这样一个文件,在这个文件中可以记录你本次涉及的一些详细信息。

2.3

requirements 部分

这部分主要是维护我们项目中能使用到的一些第三方的库文件,比如:我们可以在这个文件中建立一个文件: requirements.txt 在这个文件中可以添加比如:fastapi==0.61.1requests==2.24.0tornado==5.1.1urllib3==1.25.10uvicorn==0.11.8......等等的第三方库信息

2.4

scripts 部分

这部分主要是承载我们项目中关于代码规范的脚本,核心的主要为:做检查的 check、做格式化的 format、做类型校验的 lint 等等。

2.5

tests 部分

这部分主要承载的是我们开发过程中的一些测试案例,用于对我们的代码进行单元测试。

3

fastapi 各个部分图示