如何解决使用FastApi读取动态FormData
我可以像这样从我的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处理输入?
解决方法
您可以动态创建一个枚举,这将使您可以动态创建查询参数。
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正确呈现了它。
,下面的代码将帮助您获取动态表单数据。
@app.post("/zip")
async def buildScaffolding(request: Request):
form_data = await request.form()
print(form_data)
return ""
,
在当前情况下, 为了简单起见,我们不知道有多少输入,对于动态创建的输入, 最好接受请求,因为请求包含表单,一旦我们按Submit或Enter就会添加该表单。这意味着,无论提交了什么输入,请求都会将其作为表格传递给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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。