FastAPI/Pydantic 可以单独验证列表中的输入项吗?
Can FastAPI/Pydantic individually validate input items in a list?
我有一个快速APIpost方法:
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
from typing import List
import pandas as pd
class InputItem(BaseModel):
Feature: str
class Item(BaseModel):
Feature: str
Result: str
app = FastAPI()
@app.post("/", response_model=List[OutputItem])
def my_function(input: List[InputItem]):
df = pd.DataFrame(jsonable_encoder(input))
result = df.apply(another_method)
return result.to_dict(orient=records)
我的问题是,如果我向它传递一个这样的列表:
[
{"NOTFeature":"value"},
{"Feature":"value"},
{"Feature":"value"}
]
或者如果其中一个值是不同的数据类型,则整个过程当前失败并且 returns 出现错误。有没有办法让它处理错误,以便跳过失败的条目,并且仍然对列表中通过验证的项目执行 API 函数?
顺便说一句,如果有一种更流畅的方法来处理仍然使用数据帧的数据帧转换(这些对于函数中完成的其他数据处理是必不可少的),了解这也将非常有帮助!
欢迎来到 Stack Overflow。
您问题的简短回答是否。那是因为处理负载内容或修复格式错误的负载不是 pydantic
(以及 FastAPI
)的责任。
正确的做法是让 Feature
成员成为 Optional
并在它到达您的方法时过滤掉,如下所示:
import fastapi
import typing
import pydantic
class InputItem(pydantic.BaseModel):
feature: typing.Optional[str]
class OutputItem(pydantic.BaseModel):
Feature: str
Result: str
app = fastapi.FastAPI()
@app.post("/", response_model=typing.List[OutputItem])
def my_function(data: typing.List[InputItem]):
data = [i for i in data if i.feature is not None]
print(data)
# ... do what you gotta do
与 dict 联合作为传递似乎对我有用,即:
from typing import List, Union
@app.post("/", response_model=List[OutputItem])
def my_function(input: List[Union[InputItem, dict]]):
df = pd.DataFrame(jsonable_encoder(input))
result = df.apply(another_method)
return result.to_dict(orient=records)
我有一个快速APIpost方法:
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
from typing import List
import pandas as pd
class InputItem(BaseModel):
Feature: str
class Item(BaseModel):
Feature: str
Result: str
app = FastAPI()
@app.post("/", response_model=List[OutputItem])
def my_function(input: List[InputItem]):
df = pd.DataFrame(jsonable_encoder(input))
result = df.apply(another_method)
return result.to_dict(orient=records)
我的问题是,如果我向它传递一个这样的列表:
[
{"NOTFeature":"value"},
{"Feature":"value"},
{"Feature":"value"}
]
或者如果其中一个值是不同的数据类型,则整个过程当前失败并且 returns 出现错误。有没有办法让它处理错误,以便跳过失败的条目,并且仍然对列表中通过验证的项目执行 API 函数?
顺便说一句,如果有一种更流畅的方法来处理仍然使用数据帧的数据帧转换(这些对于函数中完成的其他数据处理是必不可少的),了解这也将非常有帮助!
欢迎来到 Stack Overflow。
您问题的简短回答是否。那是因为处理负载内容或修复格式错误的负载不是 pydantic
(以及 FastAPI
)的责任。
正确的做法是让 Feature
成员成为 Optional
并在它到达您的方法时过滤掉,如下所示:
import fastapi
import typing
import pydantic
class InputItem(pydantic.BaseModel):
feature: typing.Optional[str]
class OutputItem(pydantic.BaseModel):
Feature: str
Result: str
app = fastapi.FastAPI()
@app.post("/", response_model=typing.List[OutputItem])
def my_function(data: typing.List[InputItem]):
data = [i for i in data if i.feature is not None]
print(data)
# ... do what you gotta do
与 dict 联合作为传递似乎对我有用,即:
from typing import List, Union
@app.post("/", response_model=List[OutputItem])
def my_function(input: List[Union[InputItem, dict]]):
df = pd.DataFrame(jsonable_encoder(input))
result = df.apply(another_method)
return result.to_dict(orient=records)