FastAPI接收Jinja2模板动态生成的不定数量表单输入的方案问询
你可以直接从Request对象中获取完整的表单数据,无需提前硬编码每个动态参数,实现逻辑如下:
修改后的完整Python代码
from fastapi import FastAPI, Request, Form from fastapi.templating import Jinja2Templates dct = {"ctp_a": 1, "ctp_b": 2, "ctp_c": 20} app = FastAPI() templates = Jinja2Templates(directory="templates/") @app.get("/form") def form_post(request: Request): result = dct return templates.TemplateResponse('form3.html', context={'request': request, 'result': result}) # 改为异步函数,适配request.form()异步调用规则 @app.post("/form") async def form_post(request: Request): # 一次性拉取所有表单提交内容 form_data = await request.form() form_dict = dict(form_data) # 提取固定输入项 multiply_by = int(form_dict.pop("multiply_by")) result = {} # 自动配对动态输入项的名称和数值 for key in form_dict: if not key.endswith("_nm"): item_name = form_dict[f"{key}_nm"] item_value = int(form_dict[key]) result[item_name] = item_value * multiply_by return templates.TemplateResponse('form3.html', context={'request': request, 'result': result})
说明
原有HTML模板无需做任何修改,该方案可适配任意数量的动态输入项,后续业务增减键值对都不需要调整后端接收逻辑。
内容的提问来源于stack exchange,提问作者Jakub.Novotny
相关产品推荐
相关产品推荐

