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

Flask多子模块API开发:实现子模块独立运行与整体部署

这是模块化API开发中非常典型的需求,我结合你现有的文件夹结构,给你一套清晰可落地的实现方案:

核心思路:用Flask蓝图(Blueprint)实现模块化拆分与整合

蓝图是Flask专门为模块化设计的特性,既能让每个子模块独立开发、独立运行,又能轻松整合到主应用中,完美匹配你的需求。

第一步:给每个子模块配置独立运行能力

以todo子模块为例,其他模块(比如newsletter)完全照搬这个模式即可:

  1. 在子模块中定义蓝图
    修改api/todo/__init__.py,创建并导出蓝图:

    from flask import Blueprint
    
    # 创建todo模块的蓝图,第一个参数是蓝图名称,必须唯一
    todo_bp = Blueprint('todo', __name__)
    
    # 导入当前模块的路由,让蓝图自动注册路由规则
    from . import routes
    
  2. 编写子模块的路由逻辑
    在api/todo/routes.py中添加接口(示例):

    from . import todo_bp
    from .utils import get_sample_todos  # 可以调用子模块自己的工具类
    
    @todo_bp.route('/list')
    def get_todo_list():
        return {"code": 200, "data": get_sample_todos()}
    
  3. 添加子模块的本地启动脚本
    在api/todo/下新建run_local.py,作为单独运行该模块的入口:

    from flask import Flask
    from . import todo_bp
    
    # 创建本地独立运行的Flask实例
    app = Flask(__name__)
    # 注册蓝图,本地运行时可以不加前缀,方便测试
    app.register_blueprint(todo_bp, url_prefix='/')
    
    if __name__ == '__main__':
        # 用独立端口启动,避免和其他子模块冲突
        app.run(debug=True, port=5001)
    

    现在进入api/todo/目录,执行python run_local.py,就能单独访问todo模块的API了(比如http://localhost:5001/list)。

第二步:主入口整合所有子模块

修改根目录下的api/run.py,把所有子模块的蓝图注册到主应用中,实现完整API的运行:

import sys
from pathlib import Path
from flask import Flask

# 解决导入路径问题:将项目根目录(外层api文件夹)加入Python路径
sys.path.append(str(Path(__file__).parent.parent))

# 导入各个子模块的蓝图
from todo import todo_bp
from newsletter import newsletter_bp

# 创建主应用实例
app = Flask(__name__)

# 注册所有蓝图,统一添加前缀区分不同模块
app.register_blueprint(todo_bp, url_prefix='/todo')
app.register_blueprint(newsletter_bp, url_prefix='/newsletter')

if __name__ == '__main__':
    # 生产环境建议关闭debug,改用专业WSGI服务器(比如gunicorn)启动
    app.run(debug=False, port=5000)

现在执行python api/run.py,就能访问整合后的API了:

  • Todo模块接口:http://localhost:5000/todo/list
  • Newsletter模块接口:http://localhost:5000/newsletter/xxx

第三步:优化导入体验(可选但推荐)

上面的sys.path添加是临时方案,更优雅的方式是把项目安装为可编辑模式:

  1. 在项目根目录(外层api/)下新建setup.py,定义项目包信息:
    from setuptools import setup, find_packages
    
    setup(
        name="my_api",
        version="0.1",
        packages=find_packages()
    )
    
  2. 执行pip install -e .,将项目安装为可编辑模式,之后就可以直接在run.py中导入子模块,不需要手动添加路径了。

额外优化建议

  • 公共资源集中管理:把多个子模块共享的工具类、配置项(比如数据库连接、密钥)放到外层api/目录下(比如api/utils.py、api/config.py),子模块可以通过相对导入调用:from ..utils import xxx
  • 环境区分:用环境变量区分开发/生产环境,比如开发时加载调试配置,生产时加载正式配置
  • 生产部署:不要用app.run()启动,改用gunicorn或uwsgi等专业WSGI服务器,比如gunicorn run:app --workers=4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:11:00