fastapi: 入门python web开发-参数&Pydantic数据模型

72 阅读2分钟

get请求

from fastapi import FastAPI

app = FastAPI()

#定义接口名称
@app.get('/items/{id}')

def get_id(id: int):
 
 return {'id': id}

效果图如下

image.png

在这个例子中,id就是一个路径参数。当你访问如/items/3这样的URL时,id的值就会被设置为3,FastAPI会自动识别并解析路径参数,无需进行任何额外的配置

@app.get('/item/')
def get_id(id: int=10, name: str='bear'):
    return {'id': id, 'name': name}

效果图如下

image.png

在这个例子中,查询参数是比较常见的一种,当你访问如/item/?id=20&name=hello这样的URL时,id的值就会被设置为20,name的值就会被设置为hello,如果访问/item/,那么id和name则会返回默认值10和bear,FastAPI会自动识别并解析查询参数,无需进行任何额外的配置。

post请求

@app.post("/items") 
def read_item(item: dict):     
    return {"item": item}

效果图如下

image.png

使用Pydantic数据模型

from typing import Optional
from pydantic import BaseModel
class Item(BaseModel):
    name: str
    age: Optional[int] = 18 #可为空  默认18
    gender: str
    hobby: str = None #可为空 默认null
@app.post("/api/items/", summary="请求体", description="Pydantic请求体", tags=['测试Pydantic请求体'])
def create_item(item: Item):
    return item

效果图如下

image.png

image.png

该例子使用了 pydantic和typing。其中使用pydantic模型后,FastAPI将请求体识别为 JSON 字符串,验证数据,如果验证失败,会返回一个清晰的错误,准确指出错误数据的位置和信息,api/items 会接收到完整的请求体数据,拥有所有属性及其类型
python中typing主要做类型提示,其中Optional 是一个特殊的类型,它表示某个值可以是特定类型,也可以是 None,age字段设定默认值,如果传参中不传age,则返回设置的默认值18,如果传参age=20,则返回age:20. 另hobby参数格式,可选值,传参则返回传的值,如不传则返回null

可能会有同学看到了post请求后加有summary="请求体", description="Pydantic请求体", tags=['测试Pydantic请求体']这里不多解释,浏览器输入ip:端口号/docs自己观看即可