
http://127.0.0.1:8000/get?name=xxx&age=18
http://127.0.0.1:8000/get?age=18&name=xxx
在 url 的 ? 后面跟着的一组或多组键值对,就是查询参数
from fastapi import FastAPI
import uvicorn
app = FastAPI()
# 路径参数+请求参数
@app.get("/items/{item_id}")
async def read_item(item_id: str, name: str):
return {"item_id": item_id, "name": name}
if __name__ == "__main__":
uvicorn.run(app="3_get_query:app", host="127.0.0.1", port=8080, reload=True, debug=True)
from typing import Optional
# 必传参数+可选参数
@app.get("/items")
async def read_item(item_id: str, name: Optional[str] = None):
return {"item_id": item_id, "name": name}
name 没传所以取默认值 None
# 查询参数类型转换
@app.get("/items/{item_id}")
async def read_item(item_id: str, q: Optional[str] = None, short: bool = False):
item = {"item_id": item_id}
if q:
item.update({"q": q})
if not short:
# 如果 short == False,则加多一个键 description
item.update(
{"description": "This is an amazing item that has a long description"}
)
return item


from enum import Enum
from typing import Optional, List
# 自定义枚举类
class ModelName(Enum):
boy = "男"
girl = "女"
unknown = "不知道"
@app.get("/item_enum")
async def read_item(name: str,
sex: Optional[ModelName] = ModelName.unknown):
return {
"name": name,
"sex": sex
}

不传 sex,会取 sex 的默认值:枚举类中的 unknown 的值
# List[str]
@app.get("/list")
async def read_item(address: List[str] = None):
return {"address": address}

答案也是不行
用 Query 库! 下一篇会讲到!