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"] - 多个区域(两种写法都生效):
- 多参数写法:
?zones=London&zones=Cambridge→zones为["London", "Cambridge"] - 逗号分隔写法:
?zones=London,Cambridge→ 因设置split=True,自动拆分为["London", "Cambridge"]
- 多参数写法:
原代码失效原因
FastAPI默认不会自动将查询参数解析为列表类型,必须通过Query类明确告知框架参数类型与解析规则(比如split=True支持逗号分割)。同时原代码的缩进错误会导致运行报错,打印拼写错误会让你无法看到真实的参数值,这些细节也需要注意。
内容的提问来源于stack exchange,提问作者Paulo Alves
相关产品推荐
相关产品推荐

