Name | fastgenerateapi JSON |
Version |
0.0.28
JSON |
| download |
home_page | None |
Summary | FastAPIView Class View |
upload_time | 2024-07-11 07:54:03 |
maintainer | None |
docs_url | None |
author | ShiLiang |
requires_python | >=3.7.0 |
license | GPL-3.0-or-later |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# FastGenerateApi
[联系作者](https://github.com/ShiLiangAPI)
[Github](https://github.com/ShiLiangAPI)
#### 介绍
稳定版本:v0.0.21
建议python版本:3.9+
推荐fastapi版本:0.97.0
###### FastGenerateApi 使用说明
#### 软件架构说明
```
封装了 快速生成API,包括(增,删,改,查,递归查询,递归删除,关联修改,关联查询)
封装了 新增缓存配置,默认不使用缓存;新增树状查询方案,可配置选择
封装了 Websocket API和分组消息发送
封装了 路由接口路径的灵活配置,返回值字段的灵活配置,分页参数的灵活配置,等其他项
封装了 增,改 对唯一字段的校验,非空字段的校验
封装了 删 对唯一字段追加时间戳格式修改
封装了 查 灵活的筛选,以及swagger文档的自动生成
封装了 通过数据库模型,自动生成schemas,并swagger附带文档
封装了 类方法的实现,增加了相关的钩子函数
封装了 通用性接口,例如excel的导入导出,pdf文件生成,模型数据跨表取值
待封装 RPC的调用
```
#### 使用教程
1. 简单使用
2. 增删改查进一步优化使用
3. 查询筛选文档注意项(本地FastAPI源码修改,上线部署不需要修改)
4. 其他接口书写方式
5. websocket 使用
6. 配置参数的使用
#### 使用说明
#### 1. 简单使用
数据库模型以 附带的example为例,代码如下
- 启动后自动生成 增,删,改,查 接口
```
app = FastAPI()
class StaffView(APIView):
model_class = StaffInfo
app.include_router("v1", StaffView())
uvicorn.run(app)
```
注意点:
- 路径自动添加数据库模型转换的字段 "/staff-info"
- 自动添加swagger对应的标签,内容为数据库模型的描述
- 自动通过数据库模型生成对应的所有的schemas
#### 2. 增删改查进一步优化使用
根据增,删,改,查类,对应成员的填写
数据库模型 class PydanticMeta, 对schemas生成空值:
- include, exclude
- include: 为兼容手写schemas,推荐只限制数据库模型字段
- get_one_include, get_one_exclude
- 与include同时生效,无include自动包含数据库模型搜友字段
- 可添加跨表字段,自动生成校验和文档
- 其他字段: ("test", Optioanl[str], FieldInfo(..., description="文档描述"))
- get_all_include, get_all_exclude
- create_include, create_exclude
- update_include, update_exclude
```
待完成...
```
#### 3. 查询筛选文档注意项
本地FastAPI源码修改,上线部署不需要修改
- (fastapi == 0.97.0、0.87.0)源码修改
- 文件路径:fastapi/dependencies/utils.py/第302行
- 可搜索方法:get_dependant
```
...
param_field = get_param_field(
param=param, default_field_info=params.Query, param_name=param_name
)
############### 添加内容 ####################
try:
if type(call).__name__ == 'ModelMetaclass' and issubclass(call, BaseModel):
param.default.description = call.__fields__.get(param_name).field_info.description
except:
...
##################################
if param_name in path_param_names:
...
```
#### 4、其他接口书写方式
方法使用规则
- view 标识符号
- get/post/put/patch/delete 方法
- 后续字段: 路由路径
- pk 路径参数,可省略
- 多段路径: view_get_test__test
- url .../test/test
- 其他使用与原FastAPI一致
```
class TestSchema(BaseModel):
pk: str
test: str
class TestView(BaseView):
def view_get_test_pk(self, pk: str, name: str) -> TestSchema:
return self.success(data=TestSchema(pk=pk, test=name))
# url = .../test/{pk}
```
#### 5、websocket 使用
详情请查看example文件
#### 6、配置参数的使用
第一步:配置参数的查看
- 如果生成.env.example全局Settings中继承SettingsModel
```
from fastgenerateapi import SettingsModel
class Settings(SettingsModel):
"""
Global settings
"""
...
```
第二步:配置参数修改
- 在.env中修改参数值,会自动生效
```
[AppSettings]
# 当前页字段
APP_CURRENT_PAGE_FIELD=page
```
Raw data
{
"_id": null,
"home_page": null,
"name": "fastgenerateapi",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7.0",
"maintainer_email": null,
"keywords": null,
"author": "ShiLiang",
"author_email": "2509144896@qq.com",
"download_url": "https://files.pythonhosted.org/packages/f1/ed/62c2d6a9d7c6dbfe827d069e4b43cd1e48d4f1cca382be64849b14a12cff/fastgenerateapi-0.0.28.tar.gz",
"platform": null,
"description": "\r\n\r\n# FastGenerateApi\r\n\r\n[\u8054\u7cfb\u4f5c\u8005](https://github.com/ShiLiangAPI)\r\n\r\n[Github](https://github.com/ShiLiangAPI)\r\n\r\n#### \u4ecb\u7ecd\r\n\u7a33\u5b9a\u7248\u672c\uff1av0.0.21\r\n\u5efa\u8baepython\u7248\u672c\uff1a3.9+\r\n\u63a8\u8350fastapi\u7248\u672c\uff1a0.97.0\r\n\r\n###### FastGenerateApi \u4f7f\u7528\u8bf4\u660e\r\n\r\n\r\n#### \u8f6f\u4ef6\u67b6\u6784\u8bf4\u660e\r\n\r\n```\r\n\u5c01\u88c5\u4e86 \u5feb\u901f\u751f\u6210API,\u5305\u62ec(\u589e,\u5220,\u6539,\u67e5,\u9012\u5f52\u67e5\u8be2,\u9012\u5f52\u5220\u9664,\u5173\u8054\u4fee\u6539,\u5173\u8054\u67e5\u8be2)\r\n\u5c01\u88c5\u4e86 \u65b0\u589e\u7f13\u5b58\u914d\u7f6e\uff0c\u9ed8\u8ba4\u4e0d\u4f7f\u7528\u7f13\u5b58\uff1b\u65b0\u589e\u6811\u72b6\u67e5\u8be2\u65b9\u6848\uff0c\u53ef\u914d\u7f6e\u9009\u62e9\r\n\u5c01\u88c5\u4e86 Websocket API\u548c\u5206\u7ec4\u6d88\u606f\u53d1\u9001\r\n\u5c01\u88c5\u4e86 \u8def\u7531\u63a5\u53e3\u8def\u5f84\u7684\u7075\u6d3b\u914d\u7f6e,\u8fd4\u56de\u503c\u5b57\u6bb5\u7684\u7075\u6d3b\u914d\u7f6e,\u5206\u9875\u53c2\u6570\u7684\u7075\u6d3b\u914d\u7f6e,\u7b49\u5176\u4ed6\u9879\r\n\u5c01\u88c5\u4e86 \u589e,\u6539 \u5bf9\u552f\u4e00\u5b57\u6bb5\u7684\u6821\u9a8c,\u975e\u7a7a\u5b57\u6bb5\u7684\u6821\u9a8c\r\n\u5c01\u88c5\u4e86 \u5220 \u5bf9\u552f\u4e00\u5b57\u6bb5\u8ffd\u52a0\u65f6\u95f4\u6233\u683c\u5f0f\u4fee\u6539\r\n\u5c01\u88c5\u4e86 \u67e5 \u7075\u6d3b\u7684\u7b5b\u9009,\u4ee5\u53caswagger\u6587\u6863\u7684\u81ea\u52a8\u751f\u6210\r\n\u5c01\u88c5\u4e86 \u901a\u8fc7\u6570\u636e\u5e93\u6a21\u578b,\u81ea\u52a8\u751f\u6210schemas,\u5e76swagger\u9644\u5e26\u6587\u6863\r\n\u5c01\u88c5\u4e86 \u7c7b\u65b9\u6cd5\u7684\u5b9e\u73b0,\u589e\u52a0\u4e86\u76f8\u5173\u7684\u94a9\u5b50\u51fd\u6570\r\n\u5c01\u88c5\u4e86 \u901a\u7528\u6027\u63a5\u53e3,\u4f8b\u5982excel\u7684\u5bfc\u5165\u5bfc\u51fa,pdf\u6587\u4ef6\u751f\u6210,\u6a21\u578b\u6570\u636e\u8de8\u8868\u53d6\u503c\r\n\u5f85\u5c01\u88c5 RPC\u7684\u8c03\u7528\r\n```\r\n\r\n#### \u4f7f\u7528\u6559\u7a0b\r\n\r\n1. \u7b80\u5355\u4f7f\u7528\r\n2. \u589e\u5220\u6539\u67e5\u8fdb\u4e00\u6b65\u4f18\u5316\u4f7f\u7528\r\n3. \u67e5\u8be2\u7b5b\u9009\u6587\u6863\u6ce8\u610f\u9879\uff08\u672c\u5730FastAPI\u6e90\u7801\u4fee\u6539\uff0c\u4e0a\u7ebf\u90e8\u7f72\u4e0d\u9700\u8981\u4fee\u6539\uff09\r\n4. \u5176\u4ed6\u63a5\u53e3\u4e66\u5199\u65b9\u5f0f\r\n5. websocket \u4f7f\u7528\r\n6. \u914d\u7f6e\u53c2\u6570\u7684\u4f7f\u7528\r\n\r\n#### \u4f7f\u7528\u8bf4\u660e\r\n\r\n#### 1. \u7b80\u5355\u4f7f\u7528\r\n\r\n\u6570\u636e\u5e93\u6a21\u578b\u4ee5 \u9644\u5e26\u7684example\u4e3a\u4f8b,\u4ee3\u7801\u5982\u4e0b\r\n- \u542f\u52a8\u540e\u81ea\u52a8\u751f\u6210 \u589e,\u5220,\u6539,\u67e5 \u63a5\u53e3\r\n```\r\napp = FastAPI()\r\n\r\nclass StaffView(APIView):\r\n model_class = StaffInfo\r\n\r\napp.include_router(\"v1\", StaffView())\r\n\r\nuvicorn.run(app)\r\n```\r\n\u6ce8\u610f\u70b9\uff1a\r\n- \u8def\u5f84\u81ea\u52a8\u6dfb\u52a0\u6570\u636e\u5e93\u6a21\u578b\u8f6c\u6362\u7684\u5b57\u6bb5 \"/staff-info\"\r\n- \u81ea\u52a8\u6dfb\u52a0swagger\u5bf9\u5e94\u7684\u6807\u7b7e\uff0c\u5185\u5bb9\u4e3a\u6570\u636e\u5e93\u6a21\u578b\u7684\u63cf\u8ff0\r\n- \u81ea\u52a8\u901a\u8fc7\u6570\u636e\u5e93\u6a21\u578b\u751f\u6210\u5bf9\u5e94\u7684\u6240\u6709\u7684schemas\r\n\r\n#### 2. \u589e\u5220\u6539\u67e5\u8fdb\u4e00\u6b65\u4f18\u5316\u4f7f\u7528\r\n\u6839\u636e\u589e,\u5220,\u6539,\u67e5\u7c7b\uff0c\u5bf9\u5e94\u6210\u5458\u7684\u586b\u5199\r\n\u6570\u636e\u5e93\u6a21\u578b class PydanticMeta\uff0c \u5bf9schemas\u751f\u6210\u7a7a\u503c:\r\n- include, exclude\r\n - include: \u4e3a\u517c\u5bb9\u624b\u5199schemas\uff0c\u63a8\u8350\u53ea\u9650\u5236\u6570\u636e\u5e93\u6a21\u578b\u5b57\u6bb5\r\n- get_one_include, get_one_exclude\r\n - \u4e0einclude\u540c\u65f6\u751f\u6548\uff0c\u65e0include\u81ea\u52a8\u5305\u542b\u6570\u636e\u5e93\u6a21\u578b\u641c\u53cb\u5b57\u6bb5\r\n - \u53ef\u6dfb\u52a0\u8de8\u8868\u5b57\u6bb5\uff0c\u81ea\u52a8\u751f\u6210\u6821\u9a8c\u548c\u6587\u6863\r\n - \u5176\u4ed6\u5b57\u6bb5: (\"test\", Optioanl[str], FieldInfo(..., description=\"\u6587\u6863\u63cf\u8ff0\"))\r\n- get_all_include, get_all_exclude\r\n- create_include, create_exclude\r\n- update_include, update_exclude\r\n\r\n```\r\n\u5f85\u5b8c\u6210...\r\n```\r\n\r\n#### 3. \u67e5\u8be2\u7b5b\u9009\u6587\u6863\u6ce8\u610f\u9879\r\n\u672c\u5730FastAPI\u6e90\u7801\u4fee\u6539\uff0c\u4e0a\u7ebf\u90e8\u7f72\u4e0d\u9700\u8981\u4fee\u6539\r\n- (fastapi == 0.97.0\u30010.87.0)\u6e90\u7801\u4fee\u6539\r\n - \u6587\u4ef6\u8def\u5f84\uff1afastapi/dependencies/utils.py/\u7b2c302\u884c\r\n - \u53ef\u641c\u7d22\u65b9\u6cd5\uff1aget_dependant\r\n```\r\n...\r\nparam_field = get_param_field(\r\n param=param, default_field_info=params.Query, param_name=param_name\r\n)\r\n############### \u6dfb\u52a0\u5185\u5bb9 ####################\r\ntry:\r\n\tif type(call).__name__ == 'ModelMetaclass' and issubclass(call, BaseModel):\r\n\t param.default.description = call.__fields__.get(param_name).field_info.description \r\nexcept:\r\n ...\r\n##################################\r\nif param_name in path_param_names:\r\n ...\r\n```\r\n\r\n#### 4\u3001\u5176\u4ed6\u63a5\u53e3\u4e66\u5199\u65b9\u5f0f\r\n\u65b9\u6cd5\u4f7f\u7528\u89c4\u5219\r\n- view \u6807\u8bc6\u7b26\u53f7\r\n- get/post/put/patch/delete \u65b9\u6cd5\r\n- \u540e\u7eed\u5b57\u6bb5: \u8def\u7531\u8def\u5f84\r\n - pk \u8def\u5f84\u53c2\u6570,\u53ef\u7701\u7565\r\n- \u591a\u6bb5\u8def\u5f84\uff1a view_get_test__test\r\n - url .../test/test\r\n- \u5176\u4ed6\u4f7f\u7528\u4e0e\u539fFastAPI\u4e00\u81f4\r\n```\r\nclass TestSchema(BaseModel):\r\n pk: str\r\n test: str\r\n\r\nclass TestView(BaseView):\r\n\r\n def view_get_test_pk(self, pk: str, name: str) -> TestSchema:\r\n return self.success(data=TestSchema(pk=pk, test=name))\r\n\r\n# url = .../test/{pk}\r\n```\r\n\r\n#### 5\u3001websocket \u4f7f\u7528\r\n\u8be6\u60c5\u8bf7\u67e5\u770bexample\u6587\u4ef6\r\n\r\n#### 6\u3001\u914d\u7f6e\u53c2\u6570\u7684\u4f7f\u7528\r\n\u7b2c\u4e00\u6b65\uff1a\u914d\u7f6e\u53c2\u6570\u7684\u67e5\u770b\r\n- \u5982\u679c\u751f\u6210.env.example\u5168\u5c40Settings\u4e2d\u7ee7\u627fSettingsModel\r\n```\r\nfrom fastgenerateapi import SettingsModel\r\n\r\nclass Settings(SettingsModel):\r\n \"\"\"\r\n Global settings\r\n \"\"\"\r\n ...\r\n```\r\n\u7b2c\u4e8c\u6b65\uff1a\u914d\u7f6e\u53c2\u6570\u4fee\u6539\r\n- \u5728.env\u4e2d\u4fee\u6539\u53c2\u6570\u503c\uff0c\u4f1a\u81ea\u52a8\u751f\u6548\r\n```\r\n[AppSettings]\r\n# \u5f53\u524d\u9875\u5b57\u6bb5\r\nAPP_CURRENT_PAGE_FIELD=page\r\n```\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n",
"bugtrack_url": null,
"license": "GPL-3.0-or-later",
"summary": "FastAPIView Class View",
"version": "0.0.28",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9889dc31b1ccbcd503a45e257c465b5ea60a5e973527a243a13ffcb96be22a83",
"md5": "bb3d338f60eb591b266fbd1fcf15e9a4",
"sha256": "24e3811924c2af347d2b1b2b7566c6959d05c939f3e3f7c38b1a4bfe6832d7f5"
},
"downloads": -1,
"filename": "fastgenerateapi-0.0.28-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "bb3d338f60eb591b266fbd1fcf15e9a4",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.7.0",
"size": 94594,
"upload_time": "2024-07-11T07:54:02",
"upload_time_iso_8601": "2024-07-11T07:54:02.553702Z",
"url": "https://files.pythonhosted.org/packages/98/89/dc31b1ccbcd503a45e257c465b5ea60a5e973527a243a13ffcb96be22a83/fastgenerateapi-0.0.28-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f1ed62c2d6a9d7c6dbfe827d069e4b43cd1e48d4f1cca382be64849b14a12cff",
"md5": "ec1accae19e975f82665cf9004200c2f",
"sha256": "d9b2e0091aaeb6b0b1787d6ba05aac3b775e62a83c8c16c586d18859babf4278"
},
"downloads": -1,
"filename": "fastgenerateapi-0.0.28.tar.gz",
"has_sig": false,
"md5_digest": "ec1accae19e975f82665cf9004200c2f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7.0",
"size": 61923,
"upload_time": "2024-07-11T07:54:03",
"upload_time_iso_8601": "2024-07-11T07:54:03.973081Z",
"url": "https://files.pythonhosted.org/packages/f1/ed/62c2d6a9d7c6dbfe827d069e4b43cd1e48d4f1cca382be64849b14a12cff/fastgenerateapi-0.0.28.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-11 07:54:03",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "fastgenerateapi"
}