FastAPI中如何将字典作为GET请求的查询参数传递
在FastAPI的GET请求中传递字典作为查询参数
GET请求的查询参数本质就是键值对集合,你可以把字典直接拆解为对应参数传递,下面分服务端接收和客户端调用两部分说明:
服务端接收逻辑
方式1:直接定义单个查询参数
如果字典的键是固定的,直接在路由函数里声明对应参数即可:
from fastapi import FastAPI app = FastAPI() @app.get("/login") def login(userId: str, password: str): # 直接获取到字典拆分后的参数值 return {"received_userId": userId, "received_password": password}
方式2:用Pydantic模型统一接收(适配复杂结构)
如果字典结构更复杂,或者想统一管理参数规则,可以结合BaseModel和Depends解析:
from fastapi import FastAPI, Depends from pydantic import BaseModel app = FastAPI() class LoginParams(BaseModel): userId: str password: str @app.get("/login") def login(params: LoginParams = Depends()): # params是解析后的模型实例,可通过dict()转成字典格式 return {"received_params": params.dict()}
客户端调用(解决Requests返回字符串问题)
你提到的Requests返回字符串,是因为没有对响应做JSON解析。实际上Requests的get方法支持直接传入字典作为params参数,它会自动转成URL查询参数,而响应结果通过.json()方法就能转成字典。
示例代码:
import requests login_data = {"userId": "bob", "password": "12345"} # 直接将字典传给params参数 response = requests.get("http://localhost:8000/login", params=login_data) # 把响应的JSON字符串转成字典 result_dict = response.json() print(result_dict)
如果是FastAPI服务内部调用其他接口,推荐用httpx库,用法类似:
import httpx async def call_login_api(): login_data = {"userId": "bob", "password": "12345"} async with httpx.AsyncClient() as client: response = await client.get("http://localhost:8000/login", params=login_data) result_dict = response.json() return result_dict
内容的提问来源于stack exchange,提问作者misterkevin
相关产品推荐
相关产品推荐

