【问题标题】:Pydantic - Validation Does not HappenPydantic - 验证不会发生
【发布时间】:2021-08-24 07:01:41
【问题描述】:

我对使用 Pydantic 很陌生。

我现在面临的问题是当值超出范围时,下面的模型没有引发预期异常。

例如,如果您将 -1 传递给此模型,理想情况下它应该引发 HTTPException。但什么也没发生

我不确定我可能会出错。

任何建议都会很棒。

class GetInput:
    """
    for the fields endpoint
    """

    def __init__(self,
                 rank: Optional[int] = None,
                 interval: Optional[int] = None):

        self.rank = rank
        self.interval = interval

    @validator('rank')
    def check_if_rank_in_range(cls, v):
        """
        check if input rank is within range
        """
        if not 0 < v < 1000001:

            raise HTTPException(
                status_code=400, detail="Rank Value Must be within range (0,1000000)")
        return v

    @validator('interval')
    def check_if_interval_in_range(cls, v):
        """
        check if input rank is within range
        """
        if not 0 < v < 1000001:

            raise HTTPException(
                status_code=400, detail="Interval Value Must be within range (0,1000000)")
        return v

FastAPI 端点

@router.get('fields/',status_code=200)
def get_data(params: GetInput = Depends()):
    
    if params.rank:
        result = get_info_by_rank(params.rank)

    elif params.interval:

        result = get_info_by_interval(params.interval)
    
    return result

【问题讨论】:

  • 你没有从BaseModel继承...
  • 当我继承 BaseModel 这是我遇到的错误pydantic.errors.ConfigError: Validators defined with incorrect fields: check_if_interval_in_range, check_if_rank_in_range (use check_fields=False if you're inheriting from the model and intended this)
  • 因为你没有注释你的字段。
  • 即使在我对字段进行注释后,验证也没有发生

标签: python python-3.x fastapi pydantic


【解决方案1】:
class GetInput(BaseModel):

    rank: Optional[int]=None
    interval: Optional[int]=None
    
    @validator("*")
    def check_range(cls, v):
        if v: 
            if not 0 < v < 1000001:
                raise HTTPException(status_code=400, detail="Value Must be within range (0,1000000)")
            return v
  • 验证器因未继承 BaseModel 类而无法工作
  • 当 BaseModel 类被继承时,如果其中任何一个值为空,则会引发错误,因此需要附加 if 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多