【FastAPI】 GET 方法 参数验证

实例代码

from fastapi import FastAPI
import uvicorn

app = FastAPI()

@app.post("/user/{name}") # 路径参数
async def read_item(name: str):
    return {"name": name}

if __name__ == '__main__':
    uvicorn.run(
        app = app,
        host = "127.0.0.1",
        port = 80,
    )

导入验证

from fastapi import FastAPI, Query

可选参数

name 可传可不传

# 正常写法 name 为可选参数
@app.get("/user/")
async def read_item(age: int, name: str = None ):
    return {"name": name,"age": age}

# 验证写法 name 为可选参数
@app.get("/user/")
async def read_item(age: int, name: str = Query(None)):
    return {"name": name,"age": age}

mark

必选参数

name 必须传

# 正常写法 name 为必选参数
async def read_item(age: int, name: str):
    return {"name": name,"age": age}

# 验证写法 name 为必选参数
async def read_item(age: int, name: str = Query(...)):
    return {"name": name,"age": age}

mark

默认参数值

# 正常写法 name 默认值
async def read_item(age: int, name: str = "bigdataboy"):
    return {"name": name,"age": age}

# 验证写法 name 默认值
async def read_item(age: int, name: str = Query("bigdataboy")):
    return {"name": name,"age": age}

Query 验证

Query 主要支持一下验证

  • 长度验证:max_lengthmin_length
  • 正则验证:regex
@app.get("/user") # 路径参数
async def read_item(
        age: int,
        name: str = Query(
                        ...,            # 该参数必选
                        min_length=1,   # 最小长度为 1
                        max_length=50,  # 最大长度为 50
                        # regex=re.compile(".+bigdataboy.+").pattern # 使用编译的正则表达式 需要导入 re 库
                        regex=".+bigdataboy.+" # 正则表达式匹配验证
                    )
        ):
    return {"name": name,"age": age}

mark

其他参数

这些参数主要是对接口进行描述

@app.get("/user") # 路径参数
async def read_item(
        age: int,
        name: str = Query(
                        ...,            # 该参数必选
                        title="name",              # 标题
                        description="用户的新名字",  # 参数作用的描述
                        alias="new-name",         # 接口参数别名,URL 参数就使用该别名
                        deprecated=True,         # 代表该参数,即将弃用
                    )
        ):
    return {"name": name,"age": age}

mark

发表评论 / Comment

用心评论~