嗨,我是FastAPI的新手,我想写一个POST请求,其中输入参数是一个列表,但是我得到了错误422不可处理的实体:
{
"detail": [
{
"loc": [
"body"
],
"msg": "field required",
"type": "value_error.missing"
}
]
}
我的职位请求是:
@router.post('',status_code=200)
def register(reg_id: int, reg_name: str, reg_option_list:List[int]):
reg_item = My_DB(
id=reg_id,
name=reg_name,
option_list=reg_option_list,
)
item = db.query(My_DB).filter(My_DB.id == service_id).first()
if item is not None:
raise HTTPException(status_code=400, detail="Item exists.")
db.add(reg_item)
db.commit()
return reg_item
但是,当我像下面这样更改代码,删除列表输入并将代码中的值设置为列表时,一切都很好:
@router.post('',status_code=200)
def register(reg_id: int, reg_name: str,):
reg_item = My_DB(
id=reg_id,
name=reg_name,
option_list=[1,2,3],
)
item = db.query(My_DB).filter(My_DB.id == service_id).first()
if item is not None:
raise HTTPException(status_code=400, detail="Item exists.")
db.add(reg_item)
db.commit()
return reg_item
我将感谢关于我的列表输入参数的任何帮助。谢谢。
发布于 2022-03-10 16:30:15
根据文档 (请看一下“提示”部分)
要使用
list
类型声明查询参数,如上面的示例所示,您需要显式地使用Query
,否则它将被解释为请求体。
因此,通过按照您的方式声明一个List
参数,端点希望接收它为body
,而不是query
参数。因此,包含您提供的特定细节的422 unprocessable entity
错误(即缺少body
)。您还可以通过OpenAPI (例如,http://127.0.0.1:8000/docs )检查这一点。您将看到,reg_option_list
的值预计将在Request body
部分中给出。
这样做的方法是Query
,从而允许参数在URL中多次出现。例子如下:
from fastapi import Query
def register(reg_id: int, reg_name: str, reg_option_list: List[int] = Query(...)):
此外,请记住为您的路由指定路径名称,例如/register
,而不是要测试的空字符串''
.Sample URL:
/register?reg_id=1®_name=foo®_option_list=1®_option_list=2®_option_list=3
https://stackoverflow.com/questions/71426756
复制相似问题