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

FastAPI多个路由绑定同一函数,如何判断请求的路由?

解决方案

方法1:使用FastAPI原生的Request对象(最简便原生方案)

直接在路由函数中注入Request对象,通过request.url.path即可直接获取当前调用的路由路径,代码简洁且无需额外封装:

from fastapi import FastAPI, Request

app = FastAPI()

@app.get('/api/')
@app.get('/api/test')
def main_route(request: Request):
    used_route = request.url.path
    # 这里可以根据used_route做逻辑处理
    print(f"当前调用的路由: {used_route}")
    return {"used_route": used_route}

方法2:自定义装饰器绑定路由标识(无需注入Request)

如果觉得注入Request不够直观,可以自定义一个装饰器,给每个路由绑定对应的路径参数,直接在函数参数中获取:

from fastapi import FastAPI
import functools

app = FastAPI()

# 自定义装饰器,用于传递当前路由路径
def bind_route(route_path):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            kwargs["used_route"] = route_path
            return func(*args, **kwargs)
        return wrapper
    return decorator

# 给每个路由分别绑定对应的路径
@bind_route('/api/')
@app.get('/api/')
@bind_route('/api/test')
@app.get('/api/test')
def main_route(used_route: str):
    print(f"当前调用的路由: {used_route}")
    return {"used_route": used_route}

方法3:通过路由名称映射(适合需用路由名称的场景)

给每个路由指定唯一的name属性,然后通过request.scope获取路由名称,再映射回实际路径。这种方法适合需要用路由名称而非路径做逻辑判断的场景,但需要维护路由名称与路径的映射表:

from fastapi import FastAPI, Request

app = FastAPI()

# 维护路由名称与路径的映射
ROUTE_MAP = {
    "root_api": "/api/",
    "test_api": "/api/test"
}

@app.get('/api/', name="root_api")
@app.get('/api/test', name="test_api")
def main_route(request: Request):
    route_name = request.scope["route"].name
    used_route = ROUTE_MAP.get(route_name)
    print(f"当前调用的路由: {used_route}")
    return {"used_route": used_route}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:18:19