1 Star 5 Fork 4

wu-clan / fastapi_best_architecture

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

FastAPI 最佳架构

GitHub Static Badge Ruff Pydantic v2

[!CAUTION] 2024-3-22 (公告)

主分支已完成 app 架构重构,请格外注意 sync fork 操作,以免造成不可挽回的损失!

我们保留并锁定了原始分支(legacy-single-app-pydantic-v2),您可以在分支选择器中找到它

简体中文 | English

基于 FastAPI 框架的前后端分离中后台解决方案,遵循伪三层架构设计, 支持 python3.10 及以上版本

它的目的是让你可以直接用它作为你新项目的基础架构,本仓库作为模板库公开,任何人或企业均可免费使用

🔥持续更新维护中🔥

伪三层架构

mvc 架构作为常规设计模式,在 python web 中也很常见,但是三层架构更令人着迷

在 python web 开发中,三层架构的概念并没有通用标准,所以这里我们称之为伪三层架构

但请注意,我们并没有传统的多应用程序结构(django、springBoot...),如果您不喜欢这种模式,可以使用模板对其进行随意改造!

工作流程 java fastapi_best_architecture
视图 controller api
数据传输 dto schema
业务逻辑 service + impl service
数据访问 dao / mapper crud
模型 model / entity model

在线预览

你可以在 fastapi_best_architecture_ui 中查看部分预览截图

幸运的是,我们现在有一个演示站点: FBA UI

账号 / 密码: admin / 123456

特征

  • 使用 FastAPI PEP 593 Annotated 参数设计
  • async/await + asgiref 的全局异步设计
  • 遵循 Restful API 规范
  • 全局 SQLAlchemy 2.0 语法
  • Pydantic v1 和 v2 (不同分支)
  • Casbin RBAC 访问控制模型
  • 角色菜单 RBAC 访问控制模型
  • Celery 异步任务
  • JWT 中间件白名单认证
  • 全局自定义时区时间
  • Docker / Docker-compose 部署
  • Pytest 单元测试

内置功能

  1. 用户管理:系统用户角色管理,权限分配
  2. 部门管理:配置系统组织机构(公司、部门、小组...)
  3. 菜单管理:配置系统菜单,用户菜单,按钮权限标识
  4. 角色管理:角色菜单权限分配,角色路由权限分配
  5. 字典管理:维护系统内部常用固定数据或参数
  6. 操作日志:系统正常操作和异常操作日志记录和查询
  7. 登录认证:图形验证码后台认证登录
  8. 登录日志:用户正常登录和异常登录的日志记录与查询
  9. 服务监控:服务器硬件设备信息与状态
  10. 定时任务:自动化任务,异步任务,支持函数调用
  11. 接口文档:自动生成在线交互式 API 接口文档

本地开发

  • Python 3.10+
  • Mysql 8.0+
  • Redis 推荐最新稳定版
  • Nodejs 14.0+

后端

  1. 进入 backend 目录

    cd backend
  2. 安装依赖包

    pip install -r requirements.txt
  3. 创建一个数据库 fba,选择 utf8mb4 编码

  4. 安装并启动 Redis

  5. backend 目录下创建 .env 文件

    touch .env
    
    cp .env.example .env
  6. 按需修改配置文件 core/conf.py.env

  7. 数据库迁移 alembic

    # 生成迁移文件
    alembic revision --autogenerate
    
    # 执行迁移
    alembic upgrade head
  8. 启动 celery worker, beat 和 flower

    celery -A app.task.celery worker -l info
    
    # 定时任务(可选)
    celery -A app.task.celery beat -l info
    
    # web 监控(可选)
    celery -A app.task.celery flower --port=8555 --basic-auth=admin:123456
  9. 初始化测试数据(可选)

  10. 启动 fastapi 服务

# 帮助
fastapi --help

# 开发模式
fastapi dev main.py
  1. 打开浏览器访问:http://127.0.0.1:8000/api/v1/docs

前端

跳转 fastapi_best_architecture_ui 查看详情


Docker 部署

[!WARNING]

默认端口冲突:8000,3306,6379,5672

建议在部署前关闭本地服务:mysql,redis,rabbitmq...

  1. 进入 deploy/backend/docker-compose 目录,创建环境变量文件.env

    cd deploy/backend/docker-compose
    
    touch .env.server ../../../backend/.env
    
    cp .env.server ../../../backend/.env
  2. 按需修改配置文件 backend/core/conf.py.env

  3. 执行一键启动命令

    docker-compose up -d --build
  4. 等待命令执行完成

  5. 打开浏览器访问:http://127.0.0.1:8000/api/v1/docs

测试数据

使用 backend/sql/init_test_data.sql 文件初始化测试数据

开发流程

(仅供参考)

  1. 定义数据库模型(model)
  2. 定义数据验证模型(schema)
  3. 定义视图(api)和路由(router)
  4. 编写业务(service)
  5. 编写数据库操作(crud)

测试

通过 pytest 执行单元测试

  1. 创建测试数据库 fba_test,选择 utf8mb4 编码

  2. 使用 backend/sql/create_tables.sql 文件创建数据库表

  3. 使用 backend/sql/init_pytest_data.sql 文件初始化测试数据

  4. 进入 backend 目录,执行测试命令

    cd backend/
    
    pytest -vs --disable-warnings

状态

Alt

贡献者

特别鸣谢

互动

微信 / 扣扣

赞助我们

如果此项目能够帮助到你,你可以赞助作者一些咖啡豆表示鼓励::coffee: Sponsor :coffee:

许可证

本项目由 MIT 许可证的条款进行许可

Stargazers over time

MIT License Copyright (c) 2022 xiaowu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于 FastAPI 构建的前后端分离 RBAC 权限控制系统,采用独特的伪三层架构模型设计,内置 fastapi-admin 基本实现,并作为模板库免费开源 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/wu_clan/fastapi_best_architecture.git
git@gitee.com:wu_clan/fastapi_best_architecture.git
wu_clan
fastapi_best_architecture
fastapi_best_architecture
master

搜索帮助