如何在FastAPI中使用BaseModel处理POST请求的未知参数?
解决FastAPI接口接收未知可选参数的问题
要让你的POST接口支持接收height、weight这类未预先定义的可选参数,只需修改Pydantic模型配置并调整接口逻辑即可:
步骤1:修改Pydantic模型,允许额外字段
给Request类添加Config子类,设置extra='allow',让Pydantic保留请求中未定义的字段:
from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Request(BaseModel): user_name: str age: int # 配置允许接收额外字段 class Config: extra = 'allow' @app.post("/home") def write_home(request: Request): # 转换为包含所有字段的字典(含额外参数) full_request_data = request.dict() print(full_request_data) return full_request_data
关键细节
extra='allow':禁止Pydantic忽略未定义字段,转而将这些字段保留在模型实例中request.dict():返回包含所有已定义字段和额外字段的完整字典,直接打印或返回即可获取所有参数- 若需单独提取未知字段,可直接访问
request.__pydantic_extra__,它是存储所有额外字段的字典:print("额外参数:", request.__pydantic_extra__)
修改完成后,传入包含height、weight的请求体时,控制台会打印所有参数,接口也会返回这些额外字段。
内容的提问来源于stack exchange,提问作者Marco Parrinello
相关产品推荐
相关产品推荐

