在FastAPI中,处理逗号分隔的Query参数可以通过多种方式实现。以下是几种常见的方法:
List
类型和Query
函数你可以使用List
类型和Query
函数来处理逗号分隔的Query参数。FastAPI会自动将逗号分隔的字符串转换为列表。
from fastapi import FastAPI, Query
from typing import List
app = FastAPI()
@app.get("/items/")
async def read_items(q: List[str] = Query(None)):
return {"q": q}
在这个例子中,如果你访问/items/?q=foo,bar,baz
,q
将会是一个包含["foo", "bar", "baz"]
的列表。
如果你需要更复杂的处理逻辑,可以手动处理逗号分隔的字符串。
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = Query(None)):
if q:
items = q.split(",")
else:
items = []
return {"q": items}
在这个例子中,q
是一个字符串,你可以使用split(",")
方法将其分割成列表。
如果你需要更复杂的解析逻辑,可以定义一个自定义的解析函数。
from fastapi import FastAPI, Query
from typing import List
app = FastAPI()
def parse_comma_separated_list(q: str) -> List[str]:
return q.split(",") if q else []
@app.get("/items/")
async def read_items(q: str = Query(None)):
items = parse_comma_separated_list(q)
return {"q": items}
在这个例子中,parse_comma_separated_list
函数负责将逗号分隔的字符串转换为列表。
如果你需要更复杂的验证和转换逻辑,可以使用Pydantic模型。
from fastapi import FastAPI, Query
from pydantic import BaseModel
from typing import List
app = FastAPI()
class ItemList(BaseModel):
items: List[str]
@app.get("/items/")
async def read_items(q: str = Query(None)):
item_list = ItemList(items=q.split(",") if q else [])
return {"q": item_list.items}
在这个例子中,ItemList
模型负责将逗号分隔的字符串转换为列表,并且可以进行进一步的验证。
以上几种方法都可以处理逗号分隔的Query参数,具体选择哪种方法取决于你的需求。如果你只需要简单的列表转换,方法1是最简洁的。如果你需要更复杂的处理逻辑,可以考虑方法2、方法3或方法4。