【问题标题】:Read dynamic FormData with FastApi使用 FastApi 读取动态 FormData
【发布时间】:2021-02-01 06:37:47
【问题描述】:

我可以使用 Python FastAPI 从我的 HTML 代码中读取 JS FormData,如下所示:

<form>
 <input type ="number" name="test1">
</form>

Python FastAPI:

@app.post("/zip")
async def buildScaffolding( test1: int=Form(...)):
    print(test1)
    return ""

但现在我想动态更改 HTML 表单。就像你在商店里买东西一样:

<form>
 <input type ="number" name="numberItems">
 <!-- item 1-->
 <input type ="text" name="item_1">
 <!-- item 2-->
 <input type ="text" name="item_2">
 ...
 <!-- item n-->
 <input type ="text" name="item_n">
</form>

问题:如果我不知道要发送多少项目,如何使用 Python FastAPI 处理输入?

【问题讨论】:

标签: python forms dynamic fastapi


【解决方案1】:

以下代码将帮助您获取动态表单数据。


@app.post("/zip")
async def buildScaffolding(request: Request):
    form_data = await request.form()
    print(form_data)
    return ""

【讨论】:

【解决方案2】:

在当前情况下, 我们不知道有多少输入,为了简单起见,在动态创建输入的情况下, 最好接受请求,因为请求包含在我们按下提交或输入后添加的表单。这意味着,在提交任何输入后,请求都会将其作为表单传递给 api。

from fastapi.encoders import jsonable_encoder
@app.post('/check')
async def check(request: Request):
    da = await request.form()
    da = jsonable_encoder(da)
    print(da)
    return da

我们可以使用 jsonable_encoder 将表单输入转换为 json 格式。 卷曲它以检查它是如何工作的。例如,

curl -i -d "param1=value1&param2=value2" http://localhost:8000/check

【讨论】:

    【解决方案3】:

    您可以动态创建 Enum,这将让您动态创建查询参数。

    from fastapi import FastAPI, Form
    from enum import Enum
    
    app = FastAPI()
    
    DynamicEnum = Enum("DynamicEnum", names={"item1":"items", "item2": "comes", "item3": "from", "item4": "database"})
    
    
    @app.post("/select")
    async def select_item(item: DynamicEnum = Form(...)):
        return item
    

    让我们检查 /docs 并确保 FastAPI 正确呈现。

    【讨论】:

    • 但是动态部分发生在前端。这不是“选择了n个带参数的项目”问题的解决方案,但可能对其他人有帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    相关资源
    最近更新 更多