FastAPI查询参数验证实现原理:Query如何识别参数与类型?
FastAPI 参数验证机制解析
先看你提供的代码:
from fastapi import FastAPI, Query app = FastAPI() @app.get("/") def func(m: str = Query(max_length=5)): return '...'
1. 参数验证是不是通过装饰器实现的?
不是单纯靠@app.get装饰器实现的。@app.get的核心作用是把这个函数注册成GET请求的处理路由,而参数验证的核心依赖两个关键部分:Python的类型提示,以及FastAPI内置的依赖注入系统+Pydantic验证框架。
装饰器只是触发FastAPI去解析函数的签名信息,真正的验证逻辑是FastAPI结合类型提示和Query这类参数对象,调用Pydantic完成的。
2. Query怎么知道要验证参数m,以及它的类型是str?
FastAPI在启动时会用Python的inspect模块解析路由函数的签名信息:
- 它能识别到函数
func有个参数m,且这个参数的默认值是Query(max_length=5)创建的实例; - 同时读取到
m的类型提示为str。
FastAPI会把这两部分信息整合:将Query里的规则(max_length=5)和类型提示(str)传递给Pydantic,生成对应的验证模型。当请求进来时,就会按照这个模型对URL查询参数m做校验——既检查是否为字符串类型,又检查长度不超过5。
简单来说,Query只是个“标记器”,告诉FastAPI这个参数需要按查询参数处理并应用指定规则,而参数的名称和类型是直接从函数签名里读取的。
内容的提问来源于stack exchange,提问作者zhizunbao
相关产品推荐
相关产品推荐

