5 Star 19 Fork 5

ktianc / kinit-fast-task

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

KINIT-FAST-TASK

以下文档在本项目中提供了重要的基础

FastAPI 官方文档:https://fastapi.tiangolo.com/zh/

Pydantic 官方文档:https://pydantic-docs.helpmanual.io/

Typer 官方文档:https://typer.tiangolo.com/

SQLAlchemy 2.0 async 官方文档:https://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html

Alembic 官方文档:https://alembic.sqlalchemy.org/en/latest/

Poetry pyproject.toml 官方文档:https://python-poetry.org/docs/main/pyproject/

OpenAPI 规范官方文档:https://swagger.io/specification/

Ruff 官方文档:https://docs.astral.sh/ruff/

本项目为 KINIT 项目下的 基础定时任务版本,主推定时任务功能的使用:

  1. 定时任务功能的实现依赖于 APScheduler 开源项目
  2. 定时任务持久化依赖于 MongoDB 数据库
  3. 主要为支持异步定时任务操作,目前数据库均为异步方式操作

定时任务使用禁忌:

  1. 切勿在异步方法中使用同步操作,会造成阻塞,比如:time.sleep, requests 等操作
  2. 在使用 AddTask 添加任务方式,切勿在任务类中的 __init__ 中添加非序列化对象,比如 mongo_db

欢迎大家补充!!!!!!!!

项目结构

kinit-fast-task
├── alembic                           # ORM 数据库迁移
├── kinit_fast_task   # 主应用程序目录
│   ├── app                           # 服务模块
│   │   ├── cruds                     # 全局数据库操作 CRUD
│   │   ├── depends                   # 全局服务依赖项
│   │   ├── models                    # 全局 ORM Model
│   │   ├── routers                   # 路由,接口,服务
│   │   │   └── app_name              # 单个应用服务
│   │   │   │   ├── schemas.py        # 应用独立 schema
│   │   │   │   ├── params.py         # 分页请求参数
│   │   │   │   ├── services.py       # 业务逻辑代码
│   │   │   │   └── views.py          # 应用路由接口文件
│   │   ├── schemas                   # 全局 Pydantic Schema 数据序列化
│   │   ├── system                    # 系统路由,接口,服务
│   │   └── tasks                     # 自定义定时任务
│   ├── core                          # 系统核心组件
│   │   ├── event.py                  # 系统事件
│   │   ├── exception.py              # 系统异常处理
│   │   ├── logger.py                 # 系统日志处理
│   │   ├── middleware.py             # 系统中间件
│   │   ├── register.py               # 系统注册项
│   │   └── types.py                  # 全局数据类型
│   ├── db                            # 数据库引擎封装
│   ├── logs                          # 系统日志
│   ├── scripts                       # 系统脚本
│   │   └── app_generate              # 基于 ORM Model 生成 app
│   ├── static                        # 静态文件
│   ├── task                          # 定时任务核心文件
│   ├── utils                         # 工具模块
│   ├── config.py                     # 系统配置项
│   └── main.py                       # 系统主应用
├── tests
├── .env                              # 系统环境变量
├── .gitignore
├── pyproject.toml                    # 系统依赖库,基础信息
├── main.py                           # 主程序入口
├── ruff.toml                         # 格式化代码
└── alembic.ini                       # ORM 迁移配置文件

开发环境

开发语言:Python 3.10

开发工具:Pycharm

使用技术栈

数据库依赖情况

MongoDB

在该版本中主要依赖于 MongoDB 数据库

并且在部署时,必须为复制集模式,单节点也可以开启,因为只有开启复制集模式,才能使用 MongoDB 事务功能

部署方式可参考:https://gitee.com/ktianc/docker_env

MongoDB 的主要功能为:

  1. 存储系统操作记录
  2. 定时任务持久化存储
  3. 定时任务管理列表
  4. 定时任务执行记录

Redis

系统中暂未提供 Redis 数据库使用示例

PostgreSQL

业务逻辑功能全部会在 PostgreSQL 数据库中存储

目前只提供了 PostgreSQL 使用示例:

  1. 用户管理
  2. 角色管理

以上数据库均可在 .env 文件中选择开启或者关闭,只是关闭后会无法使用对应功能,但不会影响其他未关联功能

源码地址

gitee地址(主推):https://gitee.com/ktianc/kinit-fast-task

github地址:https://github.com/vvandk/kinit-fast-task

KINIT 完整版

gitee地址(主推):https://gitee.com/ktianc/kinit

github地址:https://github.com/vvandk/kinit

微信群

目前群聊已经达到 200 人,只能通过邀请进群,不能再直接扫描群二维码进群,需要进群的可以先加我,备注进群,我就拉你进群。

logo

首次使用

# 安装依赖库
pip3 install poetry -i https://mirrors.aliyun.com/pypi/simple/
poetry install

配置

复制项目根目录下的 .env.example 到新文件 .env

并根据您的需要自定义配置该项目

# -----------------------------------------------
# system 配置项
#   SERVER_HOST: 项目监听主机IP,默认开放给本网络所有主机
#   SERVER_PORT:项目监听端口
#   DEMO_ENV:否开启演示功能, 为 True 则取消所有POST,DELETE,PUT操作权限
#   LOG_CONSOLE_OUT:是否将日志打印在控制台
#   APPS:需要启用的 app router,该顺序也是文档展示顺序
# -----------------------------------------------
SERVER_HOST = "0.0.0.0"
SERVER_PORT = 9000
DEMO_ENV = False
LOG_CONSOLE_OUT = True
APPS = ["bilibili_hot_new", "scheduler_task", "scheduler_task_record", "system_record", "auth_user", "auth_role"]


# -----------------------------------------------
# task 配置项
#   TASK_ENABLE: 是否启用任务引擎
# -----------------------------------------------
TASK_ENABLE = True


# -----------------------------------------------
# db 配置项
#
#   ORM 配置项
#     ORM_DB_ENABLE: 是否选择使用 ORM 数据库
#     ORM_DB_ECHO: 是否选择输出 ORM 操作日志到控制台
#     ORM_DATABASE_URL: ORM 数据库连接地址,默认使用 postgresql, 格式:"postgresql+asyncpg://账号:密码@地址:端口号/数据库名称"
#
#   Redis 配置项
#     REDIS_DB_ENABLE: 是否选择使用 Redis 数据库
#     REDIS_DB_URL: Redis 数据库地址地址, 格式:"redis://:密码@地址:端口/数据库名称"
#
#   MongoDB 配置项
#     MONGO_DB_ENABLE: 是否选择使用 MongoDB 数据库
#     MONGO_DB_URL: MongoDB 数据库连接地址, 格式:"mongodb://用户名:密码@地址:端口/?authSource=数据库名称"
# -----------------------------------------------
# ORM 配置项
ORM_DB_ENABLE = True
ORM_DB_ECHO = True
ORM_DATABASE_URL = "postgresql+asyncpg://user:123456@127.0.0.1:5432/kinit"

# Redis 数据库配置
REDIS_DB_ENABLE = False
REDIS_DB_URL = "redis://:123456@127.0.0.1:6379/0"

# MongoDB 数据库配置
MONGO_DB_ENABLE = True
MONGO_DB_URL = "mongodb://user:123456@127.0.0.1:27017/?authSource=kinit"

运行启动

# 直接运行main文件
python main.py run

接口文档

Swagger UI Docs:

http://127.0.0.1:9000/docs

Redoc HTML Docs:

http://127.0.0.1:9000/redoc

代码规范

代码检查与格式化

# 代码规范检查:
ruff check

# 代码格式修复
ruff check --fix

# 代码格式化
ruff format

接口定义

  1. 前置接口地址应提前定义在 APIRouter
  2. 接口地址的最后一项应该为本接口的实际操作,通常有:query, create, update, delete, upload
  3. 不再推荐使用路径参数,应该使用查询参数代替

命名规范

cruds, models, schemas 的命名方式为:开头为模块名称,中间为 app 名称,最后为各功能名称

routers 命名方式为:开头为模块名称,中间为 app 名称

比如用户管理:模块名称为 auth, app 名称为 user

  • cruds:auth_user_crud
  • models:auth_user_model
  • schemas:auth_user_schema
  • routers:auth_user

待更新项

  • Docker Compose 启动方式

  • App 代码生成工具

  • 文件管理功能模块,通过工厂模式支持:本地 static, 本地 temp阿里云 OSS七牛云

    1. 本地 static:需要持久化存储的文件,比如附件,导入文件等
    2. 本地 temp:临时存储的文件,比如临时生成的文件,临时导出的文件,可定期删除的文件
    3. 阿里云 OSS七牛云:需要加速访问的文件,比如图片,用户头像等

    建议 本地 static, 阿里云 OSS七牛云 只选择一种进行存储,避免混乱

  • 通用数据导入导出模块

  • 自动化测试:pytest

  • ORM 多数据库支持

欢迎大家补充!!!!!!!!

后续计划

以上待更新项完成后,会推出一个 KINIT 基础标准版,基础标准版中无内置 APScheduler 定时任务模块,为一个干净的版本

KINIT 基础标准版完成后,会基于基础标准版开发 KINIT 完整版(存在前后端,微信小程序,定时任务独立模块)

与 KINIT 有什么不同

  1. 新增了包管理工具: poetry
  2. 新增了代码检查格式化工具:ruff
  3. 新增了项目配置管理工具:pydantic-settings
  4. 内置了定时任务框架:APScheduler
  5. 项目结构重新调整
  6. 整体类型提示优化
  7. 重新封装数据库管理模块
  8. ormMongoDB 操作优化,MongoDB 操作支持事务处理
  9. 对生成接口文档更加友好
  10. 日志模块优化
  11. 响应数据模块优化
  12. 新增 schema 基类,在基类中实现 hidden=True 的字段不会在接口文档中出现
  13. 将默认使用的 Mysql 改为了 PostgreSQL

其他

开发工具

Pycharm 2022.3.2

代码样式配置:

image-20230315194534959

文件代码模板:

# @Version        : 1.0
# @Update Time    : ${DATE} ${TIME}
# @File           : ${NAME}.py
# @IDE            : PyCharm
# @Desc           : 文件描述信息

image-20240518230529195

MIT License Copyright (c) 2024 ktianc 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.

简介

本项目基于Python社区FastAPI技术栈编写而成,本意为所有需要使用FastAPI开发的人提供一个合适的脚手架,避免重复开发。 在项目中也融合了很多FastAPI技术栈可以参考使用。 展开 收起
Python 等 2 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/ktianc/kinit-fast-task.git
git@gitee.com:ktianc/kinit-fast-task.git
ktianc
kinit-fast-task
kinit-fast-task
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891