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

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

items FastAPI Query 逗号 820    来源:    2025-03-13

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

方法1:使用List类型和Query函数

你可以使用List类型和Query函数来处理逗号分隔的Query参数。FastAPI会自动将逗号分隔的字符串转换为列表。

from typing import List
from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
async def read_items(q: List[str] = Query(None)):
    return {"q": q}

在这个例子中,如果你访问/items/?q=foo,bar,baz,FastAPI会将q参数解析为["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

app = FastAPI()

def parse_comma_separated_list(q: 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:使用Depends依赖注入

你还可以使用Depends来注入一个依赖函数,该函数负责解析Query参数。

from typing import List
from fastapi import FastAPI, Query, Depends

app = FastAPI()

def get_items(q: str = Query(None)):
    return q.split(",") if q else []

@app.get("/items/")
async def read_items(items: List[str] = Depends(get_items)):
    return {"q": items}

在这个例子中,get_items函数被注入到read_items路由中,负责解析q参数。

总结

FastAPI提供了多种灵活的方式来处理逗号分隔的Query参数。你可以根据具体需求选择最适合的方法。通常情况下,使用List类型和Query函数是最简单和直接的方式。