如何在fastapi中获取多个表单输入字段作为字典?

Posted

技术标签:

【中文标题】如何在fastapi中获取多个表单输入字段作为字典?【英文标题】:How to get multiple form input field as dictionary in fastapi? 【发布时间】:2020-06-14 14:24:46 【问题描述】:

我必须向 fastapi 端点提交这样的表单,其中包含 14 个输入字段,如下所示

<FORM NAME='TESTFORM' ACTION='URL' METHOD='POST'>
            <input type='hidden' name='CURRENCY' value='PAYMENT_CURRENCY'>
            <input type='hidden' name='GATEWAYNAME' value='GATEWAY_USED'>
            <input type='hidden' name='RESPMSG' value='RESPONSE_MESSAGE_DESCRIPTION'>
            <input type='hidden' name='BANKNAME' value='BANK_NAME_OF_ISSUING_PAYMENT_MODE'>
</FORM>

我可以像下面这样一个一个地获取字段。

@app.post("/users/payment/response")
def payment_response_users(
        response_currency:str = Form(...), response_gateway:str = Form(...))

所有 14 个字段都采用相同的方式。

但是有没有办法通过单个 pydantic 模式获取所有字段。像下面这样

@app.post("/users/payment/response")
def payment_response_users(
        response_model:PaymentRespModel = Form(...))

【问题讨论】:

【参考方案1】:

创建一个包含所有字段的类模型,然后添加你的类

    from pydantic import BaseModel        

    class FormData(BaseModel):
        response_currency: str
        response_gateway: str
        # your all fields

    
    def payment_response_users(form_data: FormData):
        
        # your code , access using form_data.response_currency and so on...

【讨论】:

这会产生 400 错误。 “获取请求正文时出错” @sunnysid3up,你能告诉我你在做什么吗,fastapi.tiangolo.com/tutorial/body 可能会有所帮助

以上是关于如何在fastapi中获取多个表单输入字段作为字典?的主要内容,如果未能解决你的问题,请参考以下文章

17.FastAPI 表单数据

如何使用语音识别填充所有离子表单字段?

fastapi教程翻译(十六):Form Data(表格数据)

如何从 fastapi websocket 答案中获取“lastEventId”?

如何在不完整的 Django 表单字段中获取用户输入?

如何在 FastAPI 中使用 Pydantic 模型和表单数据?