Pydantic 参数验证与文件上传。

6

我想要上传用户数据及其文件,并验证用户数据以附加文件。

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}

但它无法运行 错误:不可处理的实体 响应正文:

{
  "detail": [
    {
      "loc": [
        "body",
        "data"
      ],
      "msg": "value is not a valid dict",
      "type": "type_error.dict"
    }
  ]
}

但是如果我分开使用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

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


1
相关主题 https://dev59.com/ylEG5IYBdhLWcg3weOoT - alex_noname
2个回答

2

你不能声明希望作为JSON接收的Body字段以及Form字段,因为请求将使用application/x-www-form-urlencoded(或者如果包含文件,则使用multipart/form-data)对请求体进行编码,而不是application/json

你可以使用Form(...)字段,Pydantic模型中的Dependencies,或者发送一个JSON字符串并解析它,如这个答案所述。


0

由于 pydantic 模型验证 json 主体,但文件上传是发送在form-data中,因此您无法同时拥有它们。

因此,它们不能一起使用。

如果您想这样做,您应该使用一个技巧。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接