You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中Query传递List参数失败,如何实现多区域房屋过滤?

问题分析与解决方案

你的核心问题是未通过FastAPI的Query类显式声明列表类型的查询参数,导致框架无法正确解析URL中的参数,始终返回None。同时代码存在缩进错误、打印拼写错误(zonas应为zones),这些细节也需要修正。


修正后的完整代码

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

app = FastAPI()

# 示例房屋数据(替换为你的实际数据)
load = [
    {"location": "London", "name": "House A"},
    {"location": "Cambridge", "name": "House B"},
    {"location": "Oxford", "name": "House C"}
]

@app.get("/")
async def read_index(
    # 用Query声明列表参数,split=True支持逗号分隔的字符串自动转成列表
    zones: Optional[List[str]] = Query(None, split=True)
):
    print("zones:", zones)
    filtered_houses = []
    for house in load:
        # 原逻辑:跳过指定区域的房屋,保留其余房屋
        if zones and house["location"] in zones:
            continue
        filtered_houses.append(house)
    return {"filtered_houses": filtered_houses}

正确的参数传递方式

现在支持三种符合你需求的传参形式:

  • 不传zones参数:zones为None,不做任何过滤,返回全部房屋
  • 单个区域:?zones=London → zones被解析为["London"]
  • 多个区域(两种写法都生效):
    1. 多参数写法:?zones=London&zones=Cambridge → zones为["London", "Cambridge"]
    2. 逗号分隔写法:?zones=London,Cambridge → 因设置split=True,自动拆分为["London", "Cambridge"]

原代码失效原因

FastAPI默认不会自动将查询参数解析为列表类型,必须通过Query类明确告知框架参数类型与解析规则(比如split=True支持逗号分割)。同时原代码的缩进错误会导致运行报错,打印拼写错误会让你无法看到真实的参数值,这些细节也需要注意。

内容的提问来源于stack exchange,提问作者Paulo Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:02:27