【问题标题】:FastAPI - GET Request with Pydantic List fieldFastAPI - 带有 Pydantic List 字段的 GET 请求
【发布时间】:2021-01-01 00:47:01
【问题描述】:

我是 FastAPI 的新手(从 Flask 迁移),我正在尝试为我的 GET 路线创建一个 Pydantic 模型

from fastapi import APIRouter,Depends
from pydantic import BaseModel
from typing import Optional,List

router = APIRouter()

class SortModel(BaseModel):
    field:    Optional[str]
    directions: List[str]

@router.get("/pydanticmodel")
def get_sort(criteria: SortModel = Depends(SortModel)):
    pass #my code for handling this route.....

当我运行curl -X GET http://localhost:XXXX/pydanticmodel?directions=up&directions=asc&field=id 时,我得到422 Unprocessable Entity: {"detail":[{"loc":["body"],"msg":"field required","type":"value_error.missing"}]}

但是,如果我要更改 directions:List[str] -> directions: str,我会得到 200 OK 的方向 =“asc”。 str 适用于查询参数而 List[str] 不适用的原因是什么?我做错了什么?

谢谢。

【问题讨论】:

    标签: python fastapi pydantic


    【解决方案1】:

    这不是 Pydantic 或 FastAPI 问题。

    如果你想用 curl 发送一个数组,你应该使用 -d 标志。

    In: curl -X GET "http://127.0.0.1:8000/pydanticmodel?field=123"  -d "[\"string\"]"
    Out: {"field":"123","directions":["string"]}
    

    现在您的代码应该可以完美运行了。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。以下解决方案可行,但这并不是我真正想要的,但也许对你来说已经足够了:

      from fastapi import APIRouter,Depends, Query
      from pydantic import BaseModel
      from typing import Optional,List
      
      router = APIRouter()
      
      class SortModel(BaseModel):
          field:    Optional[str]
      
      @router.get("/pydanticmodel")
      def get_sort(criteria: SortModel = Depends(SortModel), directions: List[str] = Query(...)):
          pass #my code for handling this route.....
      

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 2021-04-15
        • 2020-09-27
        • 1970-01-01
        • 2023-01-07
        • 1970-01-01
        • 1970-01-01
        • 2020-04-01
        • 2016-08-24
        相关资源
        最近更新 更多