可选参数
上一篇文章讲过查询参数可以不是必传的,可以是可选参数
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 请求结果
可选其实也是一种校验
Query
为了对查询参数进行额外的校验,可以导入 Query 库
Query 支持多种校验
可选参数有默认值+长度最大为 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 的请求结果
传了 name,校验成功的请求结果
name 长度大于 10,校验失败的请求结果
友好的错误提示啊!!直接说清楚哪个字段长度不满足了...
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}
校验成功的请求结果
name 长度小于 3,校验失败的请求结果