"There was an error parsing the body" 在 FastAPI 中请求端点时出错
"There was an error parsing the body" error on requesting endpoint in FastAPI
我已经在 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
},
在 postman 中切换到 raw
数据(当前您在 form-data
)。
然后插入您想要的负载:
{
"username":"admin",
"id":"2d06aa3b-c25a-4499-948a-86341ac4adc5",
"email":null,
"firstName":"admin",
"lastName":"admin",
"createdTimestamp":1638268009973
}
并触发请求。
顺便说一句,当你说
The endpoint except a dict like this:
user_data = {
"username":"admin",
"id":"2d06aa3b-c25a-4499-948a-86341ac4adc5",
"email":null,
"firstName":"admin",
"lastName":"admin",
"createdTimestamp":1638268009973
},
你实际上是说端点只需要字典部分,因为 user_data
只是你 python 代码中的一个变量名,与任何请求配置完全无关。
我指定它的原因是因为你把它写成 key
你邮递员的要求 form-data
(你上传的图片)
简而言之,您的端点需要 JSON
数据,但您的客户端却发送了 form-data
。因此,在发送请求时 select 改为 raw
数据。
此外,我强烈建议使用 Pydantic 模型发送 JSON 数据,如 documentation. Thus, you can make use of the data validation that Pydantic offers. You can even use EmailStr
type for validating email inputs (requires email-validator to be installed, as described in the documentation 中所述。示例如下:
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
}
我已经在 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
},
在 postman 中切换到 raw
数据(当前您在 form-data
)。
然后插入您想要的负载:
{
"username":"admin",
"id":"2d06aa3b-c25a-4499-948a-86341ac4adc5",
"email":null,
"firstName":"admin",
"lastName":"admin",
"createdTimestamp":1638268009973
}
并触发请求。
顺便说一句,当你说
The endpoint except a dict like this:
user_data = {
"username":"admin",
"id":"2d06aa3b-c25a-4499-948a-86341ac4adc5",
"email":null,
"firstName":"admin",
"lastName":"admin",
"createdTimestamp":1638268009973
},
你实际上是说端点只需要字典部分,因为 user_data
只是你 python 代码中的一个变量名,与任何请求配置完全无关。
我指定它的原因是因为你把它写成 key
你邮递员的要求 form-data
(你上传的图片)
简而言之,您的端点需要 JSON
数据,但您的客户端却发送了 form-data
。因此,在发送请求时 select 改为 raw
数据。
此外,我强烈建议使用 Pydantic 模型发送 JSON 数据,如 documentation. Thus, you can make use of the data validation that Pydantic offers. You can even use EmailStr
type for validating email inputs (requires email-validator to be installed, as described in the documentation 中所述。示例如下:
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
}