在 FastAPI 中,在函数中声明但不属于路径参数的参数会自动解释为查询参数。这种解释与在请求正文中传递 JSON 数据的常见做法不同。
要解决此差异,有多种选项:
创建 Pydantic模型来定义预期的 JSON 正文:
from pydantic import BaseModel class Item(BaseModel): eth_addr: str @app.post("/ethAddress") def add_eth_addr(item: Item): return item
JavaScript Fetch API:
headers: { Accept: "application/json", "Content-Type": "application/json", }, body: JSON.stringify({ eth_addr: "some addr" }),
使用 Body= 和类型:
from fastapi import Body @app.post("/ethAddress") def add_eth_addr(eth_addr: str = Body()): return {"eth_addr": eth_addr}
JavaScript Fetch API:
headers: { Accept: "application/json", "Content-Type": "application/json", }, body: JSON.stringify("some addr"),
使用 embed=True 简化仅正文参数:
@app.post("/ethAddress") def add_eth_addr(eth_addr: str = Body(embed=True)): return {"eth_addr": eth_addr}
JavaScript Fetch API :
headers: { Accept: "application/json", "Content-Type": "application/json", }, body: JSON.stringify({ eth_addr: "some addr" }),
有关 JavaScript 的更多详细信息和示例,请参阅:
请记住,使用查询参数并不是 Web API 中 JSON 正文数据的典型方法。相应地调整您的代码以匹配这些选项。
以上是如何将 JSON 数据从 JavaScript 前端发送到 FastAPI 后端?的详细内容。更多信息请关注PHP中文网其他相关文章!