Pydantic 参数验证与文件上传

Ale*_*ed' 6 python pydantic fastapi

我正在尝试使用文件上传用户数据。我想做这样的事情,验证用户数据并附加文件

class User(BaseModel):
    user: str
    name: str

@router.post("/upload")
async def create_upload_file(data: User, file: UploadFile = File(...)):
    print(data)
    return {"filename": file.filename}
Run Code Online (Sandbox Code Playgroud)

但它不起作用错误:无法处理的实体响应正文:

{
  "detail": [
    {
      "loc": [
        "body",
        "data"
      ],
      "msg": "value is not a valid dict",
      "type": "type_error.dict"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

但如果我将 url 全部工作分开:

class User(BaseModel):
    user: str
    name: str

@router.post("/d")
async def create(file: UploadFile = File(...)):
    return {"filename": file.filename}

@router.post("/")
def main(user: User):
    return user
Run Code Online (Sandbox Code Playgroud)

如何将所有内容结合在一起?

Moj*_*and 0

您不能同时拥有它们,因为 pydantic 模型会验证json正文,但文件上传会以form-data.

所以它们不能一起使用。

如果你想这么做,你应该耍点小伎俩。

请查看此链接以了解如何在表单数据中使用 pydantic 模型。