FastAPI(6)- 详解 Query (上)

简介: FastAPI(6)- 详解 Query (上)

可选参数


上一篇文章讲过查询参数可以不是必传的,可以是可选参数

from fastapi import FastAPI
from typing import Optional
import uvicorn
app = FastAPI()
# 必传参数+可选参数
@app.get("/items")
async def read_item(item_id: str, name: Optional[str] = None):
    return {"item_id": item_id, "name": name}
if __name__ == "__main__":
    uvicorn.run(app="4_get_valiation:app", host="127.0.0.1", port=8080, debug=True, reload=True)


postman 请求结果


image.png

可选其实也是一种校验

 

Query


为了对查询参数进行额外的校验,可以导入 Query 库

 

Query 支持多种校验

image.png


可选参数有默认值+长度最大为 10


# 需要先导入 Query 库
from fastapi import Query
@app.get("/itmes/")
async def read_items(name: Optional[str] = Query(default=None, max_length=10)):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if name:
        results.update({"name": name})
    return results


不传 name 的请求结果

image.png


传了 name,校验成功的请求结果

image.png


name 长度大于 10,校验失败的请求结果

image.png


友好的错误提示啊!!直接说清楚哪个字段长度不满足了...

 

name: Optional[str] = Query(None) 等价于

name: Optional[str] = None

 

Optional 的作用

为了让 IDE 更好的支持智能提示

 

一个参数多个校验


# 多条校验

@app.get("/items/twice")

async def read_items(name: Optional[str] = Query(default=None, min_length=3, max_length=10)):

   return {"name": name}

 

校验成功的请求结果

image.png

name 长度小于 3,校验失败的请求结果

image.png


相关文章
|
JSON API 数据格式
FastAPI(6)- 详解 Query (下)
FastAPI(6)- 详解 Query (下)
345 0
FastAPI(6)- 详解 Query (下)
FastAPI(5)- 查询参数 Query Parameters
FastAPI(5)- 查询参数 Query Parameters
300 0
FastAPI(5)- 查询参数 Query Parameters
FastAPI(22)- Pydantic Model 结合 Union、List 的使用场景
FastAPI(22)- Pydantic Model 结合 Union、List 的使用场景
525 0
FastAPI(22)- Pydantic Model 结合 Union、List 的使用场景
FastAPI(7)- 详解 Path(上)
FastAPI(7)- 详解 Path(上)
249 0
FastAPI(7)- 详解 Path(上)
|
API Python
FastAPI(7)- 详解 Path(下)
FastAPI(7)- 详解 Path(下)
173 0
FastAPI(7)- 详解 Path(下)
|
JSON 数据库 数据格式
FastAPI(46)- JSONResponse
FastAPI(46)- JSONResponse
397 0
FastAPI(46)- JSONResponse
FastAPI(36)- FastAPI 的元数据配置和文档 URL
FastAPI(36)- FastAPI 的元数据配置和文档 URL
465 0
FastAPI(36)- FastAPI 的元数据配置和文档 URL
|
Python
FastAPI(3)- uvicorn.run()
FastAPI(3)- uvicorn.run()
1570 0
FastAPI(3)- uvicorn.run()
FastAPI(25)- File、Form 混合使用
FastAPI(25)- File、Form 混合使用
195 0
FastAPI(25)- File、Form 混合使用