【问题标题】:fastapi.exceptions.FastAPIError: Invalid args for response field! Hint: check that <class 'main.SoluteSolvent'> is a valid pydantic field typefastapi.exceptions.FastAPIError:响应字段的参数无效!提示:检查 <class 'main.SoluteSolvent'> 是否是有效的 pydantic 字段类型
【发布时间】:2022-01-06 15:06:04
【问题描述】:

在执行快速 API 代码 fastapi.exceptions.FastAPIError: Invalid args for response field! Hint: check that &lt;class 'main.SoluteSolvent'&gt; is a valid pydantic field type 时出现此错误

class SoluteSolvent():
    solvent: Text
    solute: Text

response = {}
@app.get('/predict')
def predict(sol:SoluteSolvent):
    data = sol.dict()
    solute = data['solute']
    solvent = data['solvent']
    results = predictions(solute, solvent)
    print(results)
    response["predictions"] = results[0].item()
    response["interaction_map"] = (results[1].detach().numpy()).tolist()
    return {'result':response}

我实际上是在尝试在快速 API 中复制我为预测而编写的代码。

response = {}
@app.route('/predict', methods=["POST", "GET"])
def predict():
    if request.method=='POST':
        solute = request.form["solute"]
        solvent = request.form["solvent"]

    else:
        solute = request.args.get("solute")
        solvent = request.args.get("solvent")

    results = predictions(solute, solvent)
    
    response["predictions"] = results[0].item()
    response["interaction_map"] = (results[1].detach().numpy()).tolist()
    return flask.jsonify({'result': response})

【问题讨论】:

    标签: python rest flask fastapi


    【解决方案1】:

    错误表明您传递给predict 的类型必须是pydantic BaseModel(或来自FastApi 0.67.0 版本的dataclass)。但是,如果您想传递查询参数(建议的解决方案),它不会那样工作(至少在获取请求时),请在函数中列出它们:

    @app.get('/predict')
    def predict(solute: str, solvent: str):
       print(solute, solvent)
    

    并使用模型进行发布请求(需要正文中的数据):

    from pydantic import BaseModel
    class SoluteSolvent(BaseModel):
        solvent: str
        solute: str
    
    @app.post('/predict')
    def predict(sol:SoluteSolvent):
        print(sol.solute)
    

    或者你可以直接使用底层starlette Request

    from fastapi import Request
    
    async def predict(r: Request):
        print(r.query_params["solute"])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多