Python/Pydantic 使用多个项目迭代 post body

Python/Pydantic iterate over post body with multiple items

我是 pydantic 的新手...我想发送(通过 post)多个 json 条目。这是

__root__

正确的方法? 如何迭代 post body?

中的单个条目
import uvicorn
from pydantic import BaseModel  
from fastapi import FastAPI
from typing import List

app = FastAPI()


class Books(BaseModel):
    title: str
    subtitle: str
    description: str


class BooksList(BaseModel):
    __root__: List[Books]


@app.post("/book_data")
def book_data(data: BooksList):
    # iterate over the single entries and insert it to my database

    return 'foo'


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

这是 post 人 body:

[
    {
    "title": "title1",
    "subtitle": "sub1",
    "description": "desc1"
    },
    {
    "title": "title2",
    "subtitle": "sub2",
    "description": "desc2" 
    }
]

您可以通过 data.__root__

对其进行迭代
for item in data.__root__:
    do(item)

或者您可以定义自己的 __iter____getitem__ 函数并对其进行迭代:

class BooksList(BaseModel):
    __root__: List[Books]

    def __iter__(self):
        return iter(self.__root__)

    def __getitem__(self, item):
        return self.__root__[item]

#...
for item in data:
    do(item)