我已经在 FastAPI 中实现了一个端点,并且正在从 Postman 测试它。但是每当我发送请求时,我都会收到此错误“解析正文时出错”,在搜索错误时,我在需要安装 python-multipart 的地方找到了一个解决方案,这个包已经安装了,但我仍然面临这个问题错误。 以下是我的代码:
@router.put('/user')
def update_user(user_data: dict):
from crain.uma import update_user
user_id = user_data['id']
update_user(user_id, user_data)
return {"message": "DONE"}
除了这样的字典之外的端点:
user_data = {
"username":"admin",
"id":"2d06aa3b-c25a-4499-948a-86341ac4adc5",
"email":null,
"firstName":"admin",
"lastName":"admin",
"createdTimestamp":1638268009973
},
简而言之,您的端点需要
JSON
数据,但您的客户端却发送 form-data
。因此,通过 Postman 发送请求时,您应该转到 Body
,然后选择 raw
,最后从下拉列表中选择 JSON
,如这个答案中所述。
此外,我强烈建议使用 Pydantic 模型来发送 JSON 数据,如文档中所述。因此,您可以利用 Pydantic 提供的数据验证。您甚至可以使用
EmailStr
类型来验证电子邮件输入(需要安装 email-validator,如文档中所述)。下面的例子:
from pydantic import BaseModel, EmailStr
from datetime import datetime
class User(BaseModel):
username: str
id: str
email: EmailStr = None
firstName: str
lastName: str
createdTimestamp: datetime
@app.put('/user')
def update_user(user_data: User):
from crain.uma import update_user
user_data = user_data.dict()
user_id = user_data['id']
update_user(user_id, user_data)
return {"message": "DONE"}
JSON 有效负载应如下所示:
{
"username":"admin",
"id":"2d06aa3b-c25a-4499-948a-86341ac4adc5",
"email":null,
"firstName":"admin",
"lastName":"admin",
"createdTimestamp":1638268009973
}
在邮递员中切换到
raw
数据(当前您位于 form-data
)。{
"username":"admin",
"id":"2d06aa3b-c25a-4499-948a-86341ac4adc5",
"email":null,
"firstName":"admin",
"lastName":"admin",
"createdTimestamp":1638268009973
}
并触发请求。
顺便说一句,当你说
除了这样的字典之外的端点:
user_data = {
"username":"admin",
"id":"2d06aa3b-c25a-4499-948a-86341ac4adc5",
"email":null,
"firstName":"admin",
"lastName":"admin",
"createdTimestamp":1638268009973
},
你实际上的意思是端点只期望字典部分,因为
user_data
只是Python代码中的一个变量名,与任何请求配置完全无关。key
您邮递员的要求form-data
(您上传的图片)