簡體   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