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)
我是 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)