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

FastAPI如何将端点函数声明拆分到独立模块中使用?

你的写法存在语法错误,FastAPI完全支持多文件拆分架构,无需维持单文件结构。

报错原因

@app.post属于Python装饰器语法,规则要求装饰器后必须紧跟被装饰的函数/类声明,你将装饰器直接加在已导入的函数引用前,不符合语法要求,因此触发Pylance报错。

推荐实现方式

方式1:仅抽离业务逻辑(适合小型项目轻量拆分)

仅把核心业务逻辑放到独立模块,路由定义依然保留在main.py中:

  1. 编写mymodules/operations.py存储业务逻辑:
# mymodules/operations.py
def calculate_sum(number1: int, number2: int) -> int:
    # 可扩展其他复杂逻辑,如参数校验、数据库操作等
    return number1 + number2
  1. 在main.py中导入使用:
from fastapi import FastAPI
from mymodules.operations import calculate_sum

app = FastAPI()

@app.post("/sum")
async def sum_two_numbers(number1: int, number2: int):
    return {'result': calculate_sum(number1, number2)}

方式2:使用APIRouter拆分完整路由模块(适合中大型项目)

将路由定义、参数校验、返回逻辑都放到独立业务模块,main.py仅负责实例初始化和路由注册:

  1. 编写mymodules/operations.py定义子路由:
# mymodules/operations.py
from fastapi import APIRouter

# 可自定义该模块路由的统一前缀、标签等配置
router = APIRouter(prefix="/operations", tags=["数值运算"])

@router.post("/sum")
async def sum_two_numbers(number1: int, number2: int):
    return {'result': number1 + number2}

# 同业务模块的其他接口都可以在此处统一维护
@router.post("/multiply")
async def multiply_two_numbers(number1: int, number2: int):
    return {'result': number1 * number2}
  1. 在main.py中注册子路由:
from fastapi import FastAPI
from mymodules.operations import router as operations_router

app = FastAPI()

# 注册业务模块的路由
app.include_router(operations_router)

注册完成后接口路径会自动拼接前缀,上述示例的求和接口最终路径为/operations/sum。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:03