FastAPI(5)- get 请求 - 查询参数 Query Parameters
FastAPI(5)- get 请求 - 查询参数 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,则加多一个键 description item.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
__EOF__ 本文作者: 小菠萝测试笔记 本文链接: https://www.cnblogs.com/poloyy/p/15303302.html