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

FastAPI自定义路由类:如何获取路由函数的所有输入参数

FastAPI自定义路由类中获取路由函数输入参数及默认值

可以在自定义APIRoute类中获取路由函数的输入参数,包括未传入参数时的默认值。核心思路是利用inspect模块提取路由函数的参数签名,结合FastAPI的请求解析能力获取最终参数值。

实现步骤及代码示例

导入inspect模块后,在自定义路由类中通过self.endpoint绑定目标路由函数,再提取参数信息并结合请求内容处理:

from typing import List, Callable, Dict, Any
from fastapi import Body, FastAPI, Request, Response
from fastapi.routing import APIRoute
import inspect


class CustomRoute(APIRoute):
    def get_route_handler(self) -> Callable:
        original_route_handler = super().get_route_handler()
        # 获取当前路由绑定的处理函数
        route_func = self.endpoint
        # 提取函数的参数签名
        sig = inspect.signature(route_func)
        params = sig.parameters

        async def custom_route_handler(request: Request) -> Response:
            # 1. 收集所有参数的默认值
            default_values = {}
            for name, param in params.items():
                if param.default is not inspect.Parameter.empty:
                    default_values[name] = param.default
            
            # 2. 解析请求中的实际参数(以POST请求体为例)
            request_params = {}
            if request.method == "POST":
                request_params = await request.json()
            elif request.method == "GET":
                request_params = dict(request.query_params)
            
            # 3. 合并默认值与实际参数,得到最终参数集合
            final_params = {**default_values, **request_params}
            
            # 此处可对参数进行自定义处理
            print("最终参数集合:", final_params)
            
            _r = await original_route_handler(request)
            return _r

        return custom_route_handler


def create_app():
    app = FastAPI()
    app.router.route_class = CustomRoute
    return app


app = create_app()


@app.post("/sum")
async def sum_numbers(numbers: List[int] = Body(), things: str = "stuff"):
    return {"sum": sum(numbers), "things": things}

关键说明

  • self.endpoint:APIRoute类的内置属性,直接指向当前路由绑定的处理函数(如示例中的sum_numbers)。
  • inspect.signature:用于获取函数的参数签名,通过遍历参数可判断是否存在默认值(param.default不等于inspect.Parameter.empty即为有默认值)。
  • 请求参数解析:根据请求方法区分参数来源(POST取请求体、GET取查询参数),再与默认值合并,即可得到包含默认值的最终参数集合。

内容的提问来源于stack exchange,提问作者codeAndStuff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:13:12