Caution
2023-12-21 (公告)
主分支已完全迁移到 pydantic-v2,请格外注意 sync fork 操作,以免造成不可挽回的损失! 我们保留并锁定了原始分支(pydantic-v1),您可以在分支选择器中找到它
Pydantic-V2 完工 🎉
简体中文 | English
基于 FastAPI 框架的前后端分离中后台解决方案,遵循伪三层架构设计, 支持 python3.10 及以上版本
它的目的是让你可以直接用它作为你新项目的基础架构,本仓库作为模板库公开,任何人或企业均可免费使用
持续更新维护中
mvc 架构作为常规设计模式,在 python web 中也很常见,但是三层架构更令人着迷
在 python web 开发中,三层架构的概念并没有通用标准,所以这里我们称之为伪三层架构
工作流程 | java | fastapi_best_architecture |
---|---|---|
视图 | controller | api |
数据传输 | dto | schema |
业务逻辑 | service + impl | service |
数据访问 | dao / mapper | crud |
模型 | model / entity | model |
遗憾的是,我们没有资金提供在线预览,您可以通过查看本地开发进行部署,或直接使用 Docker 进行部署,或者在 fastapi_best_architecture_ui 查看部分截图预览
- 使用 FastAPI PEP 593 Annotated 参数设计
- async/await + asgiref 的全局异步设计
- 遵循 Restful API 规范
- 全局 SQLAlchemy 2.0 语法
- Pydantic v1 和 v2 (不同分支)
- Casbin RBAC 访问控制模型
- Celery 异步任务
- JWT 中间件白名单认证
- 全局自定义时区时间
- Docker / Docker-compose 部署
- Pytest 单元测试
- 用户管理:系统用户角色管理,权限分配
- 部门管理:配置系统组织机构(公司、部门、小组...)
- 菜单管理:配置系统菜单,用户菜单,按钮权限标识
- 角色管理:角色菜单权限分配,角色路由权限分配
- 字典管理:维护系统内部常用固定数据或参数
- 操作日志:系统正常操作和异常操作日志记录和查询
- 登录认证:图形验证码后台认证登录
- 登录日志:用户正常登录和异常登录的日志记录与查询
- 服务监控:服务器硬件设备信息与状态
- 定时任务:自动化任务,异步任务,支持函数调用
- 接口文档:自动生成在线交互式 API 接口文档
- Python 3.10+
- Mysql 8.0+
- Redis 推荐最新稳定版
- Nodejs 14.0+
-
安装依赖项
pip install -r requirements.txt
-
创建一个数据库
fba
,选择 utf8mb4 编码 -
安装并启动 Redis
-
在
backend/app/
目录下创建一个.env
文件cd backend/app/ touch .env
-
复制
.env.example
到.env
cp .env.example .env
-
数据库迁移 alembic
cd backend/app/ # 生成迁移文件 alembic revision --autogenerate # 执行迁移 alembic upgrade head
-
启动 celery worker 和 beat
celery -A tasks worker --loglevel=INFO # 可选,如果您不需要使用计划任务 celery -A tasks beat --loglevel=INFO
-
按需修改配置文件
-
执行
backend/app/main.py
文件启动服务
跳转 fastapi_best_architecture_ui 查看详情
Warning
默认端口冲突:8000,3306,6379,5672
最佳做法是在部署之前关闭本地服务:mysql,redis,rabbitmq...
-
进入
docker-compose.yml
文件所在目录,创建环境变量文件.env
cd deploy/docker-compose/ cp .env.server ../../backend/app/.env # 此命令为可选 cp .env.docker .env
-
按需修改配置文件
-
执行一键启动命令
docker-compose up -d --build
-
等待命令自动完成
使用 backend/sql/init_test_data.sql
文件初始化测试数据
仅供参考
- 定义数据库模型(model),每次变化记得执行数据库迁移
- 定义数据验证模型(schema)
- 定义路由(router)和视图(api)
- 定义业务逻辑(service)
- 编写数据库操作(crud)
跳转 fastapi_best_architecture_ui 查看详情
通过 pytest 执行单元测试
-
创建测试数据库
fba_test
,选择 utf8mb4 编码 -
使用
backend/sql/create_tables.sql
文件创建数据库表 -
使用
backend/sql/init_pytest_data.sql
文件初始化测试数据 -
进入app目录
cd backend/app/
-
执行测试命令
pytest -vs --disable-warnings
有且仅有当前一个频道,请注意辨别真伪
直链跳转 |
Telegram(科学上网) |
如果此项目能够帮助到你,你可以赞助作者一些咖啡豆表示鼓励 ☕
![]() | ![]() | ![]() |
微信 | 支付宝 | ERC20 |
本项目根据 MIT 许可证的条款进行许可