0Pricing
Learn AI with Python · 课时

用于请求与响应的 Pydantic 模式

BaseModel、字段验证、类型提示、response_model,以及处理验证错误。

用于请求与响应的 Pydantic 模式 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

为什么需要模式?

直接使用字典容易出错。Pydantic 模型可以定义请求和响应的准确结构,自动验证类型,并记录您的 API 文档。FastAPI 原生支持这些模型。

BaseModel

Pydantic 模式继承自 BaseModel。每个带类型的属性都会成为经过验证的字段;类型错误会在您的代码运行前被拒绝。

from pydantic import BaseModel

class PredictRequest(BaseModel):
    features: list[float]

请求模式

定义客户端必须发送的内容。在这里,features 必须是浮点数列表;您还可以添加模型版本或请求编号等字段。

class PredictRequest(BaseModel):
    features: list[float]
    model_version: str = "latest"

响应模式

定义 API 返回的内容,让客户端获得稳定且有文档说明的契约。

class PredictResponse(BaseModel):
    prediction: float
    probability: float

在端点中使用模式

使用请求模型为参数添加类型注解,FastAPI 就会自动将 JSON 请求正文解析并验证为带类型的对象。

from fastapi import FastAPI
app = FastAPI()

@app.post("/predict")
def predict(req: PredictRequest):
    pred = model.predict([req.features])[0]
    return {"prediction": pred, "probability": 0.92}

response_model 参数

将 response_model 传给路由装饰器。FastAPI 会验证输出,并将其筛选为符合模式的结构,删除任何额外字段,同时在 /docs 中记录响应信息。

@app.post("/predict", response_model=PredictResponse)
def predict(req: PredictRequest) -> PredictResponse:
    return PredictResponse(prediction=1.0, probability=0.92)

使用 list[float] 表示特征向量

将特征声明为 list[float],意味着 Pydantic 会在推理前拒绝字符串或混合类型,在输入边界处捕获格式错误,而不是等错误深入模型代码后才暴露。

使用 HTTPException 处理错误

当类型验证通过但业务规则失败时(例如特征数量错误或模型未知),请使用状态代码和消息引发 HTTPException。

from fastapi import HTTPException

@app.post("/predict")
def predict(req: PredictRequest):
    if len(req.features) != 4:
        raise HTTPException(status_code=422,
            detail="Expected exactly 4 features")
    return {"prediction": model.predict([req.features])[0]}

字段验证器

field_validator 可以对字段实施自定义规则,例如在端点逻辑运行前拒绝空的特征列表。

from pydantic import BaseModel, field_validator

class PredictRequest(BaseModel):
    features: list[float]

    @field_validator("features")
    @classmethod
    def not_empty(cls, v):
        if not v:
            raise ValueError("features cannot be empty")
        return v

字段约束

使用 Field 声明最小长度或数值范围等约束;这些约束也会显示在自动生成的文档中。

from pydantic import BaseModel, Field

class PredictRequest(BaseModel):
    features: list[float] = Field(min_length=1)

自动返回 422 响应

请求未通过 Pydantic 验证时,FastAPI 会自动返回带有详细错误正文的 422 Unprocessable Entity,无需编写额外代码。这是 FastAPI 最能提升开发效率的优势之一。

快速检查

请检验您对 Pydantic 模式的掌握情况。

回顾

您已经为请求和响应定义了 BaseModel 模式,使用 list[float] 表示特征,应用了 response_model,针对业务错误引发了 HTTPException,并添加了字段验证器。对于无效输入,FastAPI 会自动返回 422。下一步:加载并提供模型服务。

常见问题解答

「用于请求与响应的 Pydantic 模式」课时是免费的吗?

是的 — 「用于请求与响应的 Pydantic 模式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「用于请求与响应的 Pydantic 模式」这节课中我会学到什么?

BaseModel、字段验证、类型提示、response_model,以及处理验证错误。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「用于请求与响应的 Pydantic 模式」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 面向机器学习工程师的 FastAPI 基础
  2. 用于请求与响应的 Pydantic 模式
  3. 加载和提供机器学习模型
  4. 将模型 API 容器化
← 返回 Learn AI with Python