相关疑难解决方法(0)

FastAPI - 带有 Pydantic 列表字段的 GET 请求

GET我是 FastAPI 的新手(从 Flask 迁移),我正在尝试为我的路线创建一个 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.....
Run Code Online (Sandbox Code Playgroud)

当我跑步时 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接受directions="asc". str对于查询参数有效而List[str]无效的原因是什么?我究竟做错了什么?

谢谢。

python pydantic fastapi

9
推荐指数
2
解决办法
8652
查看次数

如何在 FastAPI 中使用 Pydantic 模型定义查询参数?

我试图有一个像这样的端点/services?status=New

status将是 New或者Old

这是我的代码:

from fastapi import APIRouter, Depends
from pydantic import BaseModel
from enum import Enum

router = APIRouter()

class ServiceStatusEnum(str, Enum):
    new = "New"
    old = "Old"


class ServiceStatusQueryParam(BaseModel):
    status: ServiceStatusEnum


@router.get("/services")
def get_services(
  status: ServiceStatusQueryParam = Query(..., title="Services", description="my desc"),
):
    pass #my code for handling this route.....
Run Code Online (Sandbox Code Playgroud)

结果是我收到一个似乎与此问题相关的错误

错误说AssertionError: Param: status can only be a request body, using Body()


然后我找到了这里解释的另一个解决方案。

所以,我的代码将是这样的:

from fastapi import APIRouter, Depends
from pydantic …
Run Code Online (Sandbox Code Playgroud)

python openapi pydantic fastapi

4
推荐指数
1
解决办法
6123
查看次数

标签 统计

fastapi ×2

pydantic ×2

python ×2

openapi ×1