一个异步的
Web
开发框架,它不同于Django
或Flask
的同步框架; 自带swagger
/redoc
API 文档; 独特的依赖注入系统...
初体验 FastAPI
框架,
参考 FastAPI官网 示例代码,
和 fastapi-mysql-generator项目 大部分代码。
1. Swagger API
文档
2. Token
认证
3. 发送飞书消息 (动态 token
添加到 Header
中)
4. 效果预览
- 依赖注入系统
- Schemas模式(Pydantic)
- SQLAlchemy的ORM操作(Pymysql)
- Typing hint类型提示
- 统一的Restful响应体风格
- Loguru日志集成配置
- Oauth2密码认证模式
- Requests的二次封装
cd project_dir/
# 安装依赖库
pip install -r requirements.txt
# 使用ASGI协议框架 - 使用 Uvicorn 异步服务启动 (可搭配supervisor托管后台运行)
uvicorn main:app --host=127.0.0.1 --port=8000 --reload
uvicorn main:app --host=127.0.0.1 --port=8000 --workers=4
- 注入ENV环境变量:
准备一个飞书应用账号
---
APP_ID='cli_a3c*******73c900c'
APP_SECRET='JkDGAVj3p3z************uLR3i683'
准备一个MysqlDB服务器
---
DB_USER='root'
DB_PASSWD='*****'
DB_HOST='127.0.0.1'
DB_PORT='3306'
DB_NAME='app'
- 初始化数据库:
需对库进行migrate操作(生成表):
# ./venv/bin/python3 sql_app/operation/migrate.py
添加一条oauth2用户数据条目(建议使用脚本,密码字段为密文):
# ./venv/bin/python3 sql_app/operation/create_user.py
当然也可以使用sql,初始化sql脚本:
# mysql -uroot -p***** < initial.sql
.
├── README.md # 自述文件
├── api # api目录
│ ├── __init__.py
│ └── v1
│ ├── __init__.py
│ ├── depend
│ │ └── verify_header.py
│ ├── deploy.py # 功能api
│ ├── home.py
│ ├── oauth.py
│ └── schema # 各功能api相对应的schema类型目录
│ ├── base.py
│ ├── deploy.py
│ └── oauth.py
├── common # 功能函数
│ ├── __init__.py
│ ├── custom_exc.py # 自定义异常
│ └── logger.py # 日志模块
├── core # 核心目录
│ ├── config # 项目配置
│ │ ├── __init__.py
│ │ ├── development_config.py
│ │ └── production_config.py
│ └── server.py # 挂载app对象
├── feishu # 飞书业务代码相关
│ ├── api # api目录
│ │ └── send_msg.py
│ ├── lark # lark平台认证及消息卡片模板
│ │ ├── auth.py
│ │ └── card.py
│ └── utils # 封装通用requests库请求
│ ├── http.py
│ └── wrapper.py
├── logs # 本地日志
│ ├── 2022-11-17_error.log
│ ├── 2022-11-17_info.log
│ └── 2022-11-17_warning.log
├── main.py # 主入口文件
├── requirements.txt # 依赖说明
├── router # 路由系统
│ └── v1_router.py
├── schema # 通用模式类型
│ └── response
│ └── resp.py # 统一的响应体格式
├── sql_app # sqlalchemy相关ORM目录
│ ├── __init__.py
│ ├── crud.py
│ ├── database.py
│ ├── main.py
│ ├── models.py
│ ├── operation # 迁移脚本等
│ │ ├── create_user.py
│ │ ├── initial.sql
│ │ └── migrate.py
│ └── schemas.py
├── static # 静态文件(不涉及)
├── tests # 本地测试目录
│ └── local_settings.py
└── utils # 工具类
├── __init__.py
├── crypts.py
└── tickets.py
之前使用 Flask
的蓝图布局,写过一个简单版本的飞书机器人消息 API Restful
服务:
仓库地址