在使用FastApi在定义一个请求时,对请求的参数声明使用的是pydantic库中BaseModel,pydantic是一个非常擅长数据效验的库,看代码实例如下:
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class StudentItem(BaseModel):
"""
定义一个StudentItem的请求体
其中,如果对参数进行初始化,则为可选参数,在url请求中,可以不使用
"""
name: str # 姓名,必选
age: int # 年龄,必选
score: Union[int, None] = None # 分数,可选
@app.post("/get_student_info/{student_id}")
async def get_student_info(student_id: int, item: StudentItem):
"""
获取学生信息的接口
:param student_id:
:param item:
:return:
"""
return {
"id": student_id,
"name": item.name,
"age": item.age
}
在这段代码中,我们先定义了一个StudentItem的类,该类定义了三个变量,其中name,age是必须的,没有进行初始化,所以在请求或url构造中,必须要填写的字段,而score进行了初始化,所以是一个可选的,在构造请求或url中,可以不用填写。然后,定义了get_student_info的路由,里面演示了StudentItem的使用,
另外,Union的作用用来标识变量的是多类型,类型限定为Union右边中括号中的类型。
使用Doc交互式的API接口调试功能来测试该接口

以上就是我们构造的数据来准备请求这个/get_student_info这个接口,在这里的构造的StudentItem数据中,我们没有对score来进行复制和定义,因为他是可选的,所以,我们在这里可以不使用。

上面是调用这个接口的结果图片,可以看到是正常返回的结果。