You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中基于预定义字典实现子用例请求参数关联验证的方法

FastAPI关联参数合法性校验实现方案

你需要实现的是依赖于另一个参数取值的动态校验,FastAPI支持两种常用实现方式,可直接复用:


方案1:基于Pydantic校验(推荐,适合校验逻辑复用场景)

通过Pydantic的字段校验器可直接获取同模型下其他已校验字段的值,完美匹配关联校验需求:

from typing import Literal
from fastapi import FastAPI, Form, Depends
from pydantic import BaseModel, validator
from typing_extensions import Annotated

# 预定义用例字典
d = {'a': [1, 2], 'b': [3, 4]}
# 提取一级用例合法值集合
USECASE_CHOICES = tuple(d.keys())

app = FastAPI()

# 定义参数校验模型
class UsecaseRequest(BaseModel):
    usecase: Literal[USECASE_CHOICES]
    subusecase: int

    @validator('subusecase')
    def subusecase_match_usecase(cls, v, values):
        # 若usecase本身校验不通过则跳过当前校验
        if 'usecase' not in values:
            return v
        valid_subs = d[values['usecase']]
        if v not in valid_subs:
            raise ValueError(f"usecase为{values['usecase']}时,subusecase仅允许取值:{valid_subs}")
        return v

# 绑定Form参数解析依赖
async def parse_form(
    usecase: str = Form(...),
    subusecase: int = Form(...)
):
    return UsecaseRequest(usecase=usecase, subusecase=subusecase)

# 接口定义
@app.post("/documents")
async def data(request: Annotated[UsecaseRequest, Depends(parse_form)]):
    return {"usecase": request.usecase, "subusecase": request.subusecase}

校验效果:

  • 传入usecase=a&subusecase=2时请求正常
  • 传入usecase=a&subusecase=3时自动返回422校验错误
  • 传入非法usecase值时优先触发一级参数校验,返回对应错误

方案2:轻量直接校验(适合逻辑简单无需复用场景)

如果校验逻辑仅用于当前接口,可直接在路径函数内做判断:

from typing import Literal
from fastapi import FastAPI, Form, HTTPException

d = {'a': [1, 2], 'b': [3, 4]}
USECASE_CHOICES = tuple(d.keys())

app = FastAPI()

@app.post("/documents")
async def data(
    usecase: Literal[USECASE_CHOICES] = Form(...),
    subusecase: int = Form(...)
):
    if subusecase not in d[usecase]:
        raise HTTPException(
            status_code=422,
            detail=f"usecase为{usecase}时,subusecase仅允许取值:{d[usecase]}"
        )
    return {"usecase": usecase, "subusecase": subusecase}

内容的提问来源于stack exchange,提问作者Alexander Vedmed'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:24:06