繁体   English   中英

使用 FastApi 读取动态 FormData

[英]Read dynamic FormData with FastApi

我可以从我的 HTML 代码中使用 Python FastAPI 读取 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 处理输入?

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


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

您可以动态创建 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 正确呈现。

在此处输入图片说明

在当前情况下,我们不知道有多少输入,为了简单起见,在动态创建的输入的情况下,最好采用请求,因为请求包含我们按下提交或输入后添加的表单。 这意味着,无论输入是什么,在提交之后,请求都会将其作为表单传送到 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM