AI智能
改变未来

FastAPI(5)- 查询参数 Query Parameters


什么是查询参数?

http://127.0.0.1:8000/get?name=xxx&age=18

http://127.0.0.1:8000/get?age=18&name=xxx

在 url 的 ? 后面跟着的一组或多组键值对,就是查询参数

FastAPI 的查询参数

  • 当声明了不属于路径参数以外的其他函数参数时, FastAPI 会自动解析为查询参数
  • 和路径参数不同,查询参数可以是可选非必填的,也可以具有默认值

路径参数+请求参数的栗子

from fastapi import FastAPIimport uvicornapp = 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 的请求结果

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,则加多一个键 descriptionitem.update({\"description\": \"This is an amazing item that has a long description\"})return item

short 是 True 的请求结果

short 是 False 的请求结果

指定枚举类型请求参数的栗子

from enum import Enumfrom 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,会取 sex 的默认值:枚举类中的 unknown 的值

查询参数能用 List[str] 传参吗?

# List[str]@app.get(\"/list\")async def read_item(address: List[str] = None):return {\"address\": address}

postman 请求的结果

  • 即使参数值写成数组形式也不会传值成功,因为查询参数都是字符串
  • 所以 [\”广州\”,\”深圳\”] 其实是一个字符串 str,并不是 List[str],那要怎么才能传数组呢?

分开多次传 address 可以吗?

答案也是不行

那要怎么做呢?

用 Query 库! 下一篇会讲到!

https://www.cnblogs.com/poloyy/p/15306809.html

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » FastAPI(5)- 查询参数 Query Parameters