基于 FastAPI 的个人服务项目框架,采用分层架构设计
教程,包含了从 0 到 1 的安装过程,以及安装完成后的使用教程
- Python 3.8+
- MySQL 8.0+
pip install -r requirements.txt
- 创建 MySQL 数据库:
CREATE DATABASE arch_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 复制环境配置文件:
cp .env.example .env
- 修改
.env
文件中的数据库连接信息:
DATABASE_URL=mysql+aiomysql://用户名:密码@localhost:3306/arch_db
- 如果需要测试的话,还需要创建测试数据库:
CREATE DATABASE arch_test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 修改
.env
文件中的测试数据库连接信息:
TEST_DATABASE_URL=mysql+aiomysql://用户名:密码@localhost:3306/arch_test_db
python main.py
应用启动后访问:
- API 文档:http://localhost:8000/docs
FastAPIBigArchitecture/
├── apis
│ ├── doctor
│ │ ├── api
│ │ │ ├── __init__.py
│ │ │ └── doctor.py
│ │ ├── dependencies
│ │ ├── repository
│ │ │ ├── appointment.py
│ │ │ ├── doctor.py
│ │ │ └── schedule.py
│ │ ├── schemas
│ │ │ ├── appointment.py
│ │ │ ├── doctor.py
│ │ │ └── schedule.py
│ │ └── services
│ │ ├── appointment.py
│ │ ├── doctor.py
│ │ └── schedule.py
│ ├── hospital
│ └── __init__.py
├── config
│ └── settings.py
├── db
│ ├── database.py
│ ├── init_db.py
│ └── models.py
├── exts
│ ├── exceptions
│ │ └── handlers.py
│ ├── logururoute
│ │ ├── business_logger.py
│ │ └── config.py
│ ├── requestvar
│ │ └── bing.py
│ └── responses
│ └── json_response.py
├── middlewares
│ └── logger
│ └── middleware.py
├── plugins
├── static
├── testcase
│ ├── conftest.py
│ └── test_sync_api.py
├── utils
│ └── datetime_helper.py
├── wiki
│ ├── db.md
│ ├── logger.md
│ └── test.md
├── .env.example
├── .gitignore
├── app.py
├── CLAUDE.md
├── main.py
├── pytest.ini
├── README.md
└── requirements.txt
项目采用经典的五层架构模式:
-
API 层 (
api/
) - 处理 HTTP 请求和响应- 路由定义和请求验证
- 调用业务逻辑层
- 异常处理和响应格式化
-
业务逻辑层 (
services/
) - 核心业务逻辑- 业务规则实现
- 数据处理和验证
- 调用数据访问层
-
数据访问层 (
repository/
) - 数据库操作- 数据库查询和操作
- 数据映射和转换
- 事务管理
-
数据模型层 (
schemas/
) - 数据传输对象- 请求/响应模型定义
- 数据验证规则
- 序列化/反序列化
-
依赖注入层 (
dependencies/
) - 依赖注入管理- 依赖注入管理
- 依赖注入的配置
- database.py: 异步 MySQL 连接池配置
- models.py: SQLModel 数据库表定义
- init_db.py: 自动创建数据库表
- settings.py: 基于 Pydantic 的配置类
- 支持环境变量和
.env
文件 - 数据库连接池配置
- responses/: 统一的 Success/Fail 响应格式
- exceptions/: 全局异常处理
- logururoute/: 结构化日志配置
- loger/: 请求/响应日志记录
- 自动记录 API 调用信息
- 支持忽略特定 URL
- Doctor: 医生信息(姓名、科室、职称、专长等)
- Schedule: 医生排班(日期、时间段、最大接诊数)
- Appointment: 预约记录(患者信息、预约时间、状态)
- Patient: 患者信息(姓名、联系方式、病史等)
- 医生 ↔ 排班:一对多关系
- 医生 ↔ 预约:一对多关系
- 患者 ↔ 预约:一对多关系
每个功能模块遵循固定的目录结构:
module_name/
├── __init__.py # 模块导出
├── api/ # API 路由层
├── services/ # 业务逻辑层
├── repository/ # 数据访问层
├── schemas/ # 数据模型层
└── dependencies/ # 依赖注入
exts/ 目录用于存放自定义扩展组件,如全局日志、请求上下文变量等。
plugs/ 目录用于存放插件扩展,如自定义插件、第三方插件等。
根目录开发规范:
- 可以添加自定义的一些相关模块,如wxchatsdk(微信支付SDK)
- 使用 Python 类型注解
- 异步编程模式(async/await)
- 依赖注入模式
- 统一错误处理
- RESTful API 设计
# 安装依赖
pip install -r requirements.txt
# 启动开发服务器
python main.py
# 查看 API 文档
# 访问 http://localhost:8000/docs
- Web 框架: FastAPI
- 数据库: MySQL + SQLModel + SQLAlchemy
- 异步驱动: aiomysql
- 配置管理: Pydantic Settings
- 日志记录: Loguru
- API 文档: Swagger UI / ReDoc
- 类型检查: Python Type Hints
- 书籍: 钟远晓. FASTAPI WEB开发入门、进阶与实战. 机械工业出版社, 2023. 本项目的框架基于该书的预约挂号系统实战部分进行了改写与完善
- Use singular nouns for database table names,数据库表名规范参考
- AzurLaneAutoScript,参考其开发规范以及文档编写风格