FastAPI Python 在 POST 请愿中没有价值

问题描述 投票:0回答:2

我有一个 FastAPI 函数定义为:

@app.post("/rating")
def read_prediction(id: int, team: int, location: float, age: float):

当我收到 POST 请愿书时,问题就开始了,其中预定义参数之一没有值,如下所示:

*"POST /rating?id=27691&team=1673&location=328&age= HTTP/1.1" 422*

有了这个请求,就不进入函数了。我尝试过不同的选项,例如引入默认值,但它不起作用。

@app.post("/rating")
def read_prediction(id: int, team: int, location: float, age: float = 26.5):

还有可选的

from typing import Optional
def read_prediction(id: int, team: int, location: float, age: Optional[float] = 26.5):

但是我无法处理这个异常。当 POST 请愿书包含年龄时,该函数将按预期工作。

我一直在考虑的另一个解决方案是定义多个函数,不带参数可以为空,但我不知道这是否是解决它的最佳方法。

python post parameters fastapi
2个回答
1
投票

即使你的目的是发帖,如果你把帖子改成获取也可以,但没有意义。同样,由于您的意图是发布,因此您应该使用here给出的模型,或者如果您希望在请求正文中添加每个参数的正文,或者如果您希望在查询参数中添加查询,甚至两者都添加!

from fastapi import Path, Body, Query

@app.post("/rating")
def read_prediction(id: int = Query(...), age: float = Body(None)):
    """
    ... -> mandatory or None for optional
    """

在 fn 参数本身中添加默认值(26.5 或任何其他值)并不好,而是根据需要在 fn 内部进行


0
投票

只需从您的网址中删除

&age=
,如果这是不可能的或类似的事情,则从您的fastapi代码中删除数据类型

@app.post("/rating")
def read_prediction(id: int, team: int, location: float, age):

这会很好地工作,如果您确实想应用数据类型,则创建模型并接受数据作为带有所有验证的请求正文。

© www.soinside.com 2019 - 2024. All rights reserved.