FastAPI 相当于 Flask 的 request.form,用于不可知的形式



我尝试从Flask迁移到FastAPI,我想知道是否有类似于Flask的东西:

payload = request.form.to_dict(flat=False)
payload = {key:payload[key][0] for key in payload}

对于快速API。

到目前为止,我只发现了一些技巧,您是否仍然必须一一实现所有表单的参数到函数中:

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(...)):

但由于所有表单字段的必要声明,它仍然非常严格。

还有其他更不可知论和优雅的方法吗?

提前感谢,如果这是一个微不足道的问题,我无法通过谷歌搜索找到:)

你可以获取底层的 starlette 请求并使用它的 request.form(( 方法。 它需要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"}

最新更新