插件窝 干货文章 FastAPI中如何处理逗号分隔的Query参数?

FastAPI中如何处理逗号分隔的Query参数?

items FastAPI 方法 逗号 496    来源:    2025-03-11

在FastAPI中,处理逗号分隔的Query参数可以通过多种方式实现。以下是几种常见的方法:

方法1:使用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,bazq将会是一个包含["foo", "bar", "baz"]的列表。

方法2:手动处理字符串

如果你需要更复杂的处理逻辑,可以手动处理逗号分隔的字符串。

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(",")方法将其分割成列表。

方法3:自定义解析函数

如果你需要更复杂的解析逻辑,可以定义一个自定义的解析函数。

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函数负责将逗号分隔的字符串转换为列表。

方法4:使用Pydantic模型

如果你需要更复杂的验证和转换逻辑,可以使用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。