- 前言
- 一、路径参数基础
- 二、路径参数数值校验
- 三、路径参数预设值
- 四、路径参数路径 *** 作配置
- 总结
前言
最近看了一遍FastAPI的官方文档中的请求部分,自己梳理了一下请求阶段的路径参数、查询参数、请求体、Cookie、Header的大致的使用方法,其中包含了数据校验以及元数据设置等。
以下例子均来自官方文档(本人比较懒,手动狗头)
本次就介绍下 路径参数 的具体使用方法:
通过在装饰器中添加具体的路径,以及类似格式化字符串的方式来设置动态路径,具体代码如下:
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id:int):
return {"item_id": item_id}
if __name__ == '__main__':
uvicorn.run(app)
执行后的可在OpenAPI:http://127.0.0.1:8000/docs 界面查看到具体的接口信息
这里可以明确的说明这个参数是路径参数,item_id下面标注着path字样。
- 数据校验方式一:使用python3.6以后加入的类型声明方式,那么当你传入具体参数的时候,框架会自动帮助你进行校验,具体从那做方式如下
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id:int):
return {"item_id": item_id}
if __name__ == '__main__':
uvicorn.run(app)
OpenAPI这里会自动展示你必须输入的入参类型,否则就会报错:
- 通过导入 Path来进行数据校验,具体代码如下:
import uvicorn
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
*,
item_id: int = Path(..., title="The ID of the item to get", gt=0, le=1000),
q: str,
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
if __name__ == '__main__':
uvicorn.run(app)
Path(…)代表着这是个必须输入的参数
title参数 具体还没有看到展示的地址
如果申明的是int或者float,那么一下参数就是对输入数值的规范:
三、路径参数预设值gt:大于(greater than)
ge:大于等于(greater than or equal)
lt:小于(less than)
le:小于等于(less than or equal)
import uvicorn
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name == ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
if model_name.value == "lenet":
return {"model_name": model_name, "message": "LeCNN all the images"}
return {"model_name": model_name, "message": "Have some residuals"}
if __name__ == '__main__':
uvicorn.run(app)
这里引入Enum模块,通过同时继承str和Enum的方式来规定一个预设值中的具体内容,然后在路径 *** 作函数的入参中就可以直接进行类型声明成已有的范围。接下来看下OpenAPI的展现形式:
在这里可以直接选择已经预设的参数,而不可以输入其他信息。
- status_code 状态码
- tags 参数
- summary 参数
- description 参数
- docstring 文档字符串
- response_description 响应描述
- deprecated 弃用路径 *** 作
这里我就用一个例子类具体展示以上所有参数的作用。代码如下:
import uvicorn
from typing import Optional, Set
from fastapi import FastAPI, status
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
tags: Set[str] = set()
@app.post("/items/",
response_model=Item,
response_description="这里是response_description",
status_code=status.HTTP_200_OK,
tags=["这里是tags"],
summary="这里是summary",
description="这里是description",
# deprecated=True
)
async def create_item(item: Item):
"""
这里是文档字符串
:param item:
:return:
"""
return item
if __name__ == '__main__':
uvicorn.run(app)
具体的生效效果如下图所示:
如果将deprecated=True打开以后,这个借口就为弃用的状态:
总结
本来是想着要把request的相关的所有内容都写到一篇里面,但是一个模块我就写了1个小时了,还有些官方文档中的其他技术细节,这里就没有一一列举了,等将来真正使用起来,有使用心得了再继续丰富这里的内容,现在就这样吧,不早了,晚安。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)