Flask 的 FastAPI 等价物 request.form,用于不可知的形式
FastAPI equivalent of Flask's request.form, for agnostic forms
我尝试从 Flask 迁移到 FastAPI,我想知道是否有类似 Flask 的东西:
payload = request.form.to_dict(flat=False)
payload = {key:payload[key][0] for key in payload}
对于 FastAPI。
到现在为止我只发现了一些 hack,你是否仍然必须将所有表单的参数一个一个地实现到一个函数:
from pydantic import BaseModel
class FormData(BaseModel):
alfa: str=Form(...)
vita: str=Form(...)
async def Home(request: Request, form_data:FormData)
这个例子在可读性方面当然比标准表单处理更好:
async def Home(username: str = Form(...), something_else: str = Form(...)):
但由于所有表单字段的必要声明,它仍然有很大的限制。
还有其他更不可知且更优雅的方法吗?
提前致谢,如果这是一个我无法通过谷歌搜索找到的微不足道的问题,我深表歉意:)
您可以让底层小明星 request and use its request.form() method. It requires python-multipart 工作:
from fastapi import FastAPI, Request
app = FastAPI()
@app.post("/example")
async def example(request: Request):
form_data = await request.form()
return form_data
调用示例:
C:\>curl -X POST "http://localhost:8000/example" -d "hello=there&another=value"
{"hello":"there","another":"value"}
我尝试从 Flask 迁移到 FastAPI,我想知道是否有类似 Flask 的东西:
payload = request.form.to_dict(flat=False)
payload = {key:payload[key][0] for key in payload}
对于 FastAPI。
到现在为止我只发现了一些 hack,你是否仍然必须将所有表单的参数一个一个地实现到一个函数:
from pydantic import BaseModel
class FormData(BaseModel):
alfa: str=Form(...)
vita: str=Form(...)
async def Home(request: Request, form_data:FormData)
这个例子在可读性方面当然比标准表单处理更好:
async def Home(username: str = Form(...), something_else: str = Form(...)):
但由于所有表单字段的必要声明,它仍然有很大的限制。
还有其他更不可知且更优雅的方法吗?
提前致谢,如果这是一个我无法通过谷歌搜索找到的微不足道的问题,我深表歉意:)
您可以让底层小明星 request and use its request.form() method. It requires python-multipart 工作:
from fastapi import FastAPI, Request
app = FastAPI()
@app.post("/example")
async def example(request: Request):
form_data = await request.form()
return form_data
调用示例:
C:\>curl -X POST "http://localhost:8000/example" -d "hello=there&another=value"
{"hello":"there","another":"value"}