如何实现主Flask应用调用其他三个Flask应用并同主机运行?
同一主机运行多Flask应用的解决方案
当然可以让这4个应用在同一主机上运行,下面提供两种可行的实现方案:
方案一:用蓝图整合为单个Flask应用(推荐)
这种方式将三个子应用整合到主应用中,共享同一个Flask实例,无需多个端口,结构更简洁。
1. 修改子应用为蓝图
将app1.py、app2.py、app3.py从独立Flask应用改为蓝图(Blueprint),以app1.py为例:
from flask import Blueprint, render_template # 创建蓝图实例 app1_bp = Blueprint('app1', __name__) # 原有的路由和视图函数保留,直接绑定到蓝图上 @app1_bp.route('/app1') def app1_page(): return render_template('app1.html')
app2.py、app3.py做同样修改,分别创建app2_bp、app3_bp蓝图并绑定各自路由。
2. 主应用index.py注册蓝图
from flask import Flask, render_template from app1 import app1_bp from app2 import app2_bp from app3 import app3_bp app = Flask(__name__) # 注册三个蓝图,访问路径对应各自的前缀 app.register_blueprint(app1_bp) app.register_blueprint(app2_bp) app.register_blueprint(app3_bp) # 主页面路由 @app.route('/') def index(): return render_template('index.html') if __name__ == '__main__': app.run(debug=True)
3. 主页面index.html添加跳转链接
<!DOCTYPE html> <html> <head> <title>主应用入口</title> </head> <body> <h1>我的Flask应用集合</h1> <ul> <li><a href="/app1">打开App1</a></li> <li><a href="/app2">打开App2</a></li> <li><a href="/app3">打开App3</a></li> </ul> </body> </html>
启动index.py后,访问http://localhost:5000即可看到链接,点击直接跳转到对应子应用页面。
方案二:独立运行多应用(不同端口)
如果不想修改子应用结构,可让四个应用在同一主机的不同端口独立运行:
1. 修改子应用的启动端口
分别给app1.py、app2.py、app3.py指定不同端口,以app1.py为例:
# 保留原有代码,仅修改启动部分 if __name__ == '__main__': app.run(debug=True, port=5001)
app2.py用port=5002,app3.py用port=5003,主应用index.py默认用5000端口。
2. 主页面index.html修改链接地址
<!DOCTYPE html> <html> <head> <title>主应用入口</title> </head> <body> <h1>我的Flask应用集合</h1> <ul> <li><a href="http://localhost:5001">打开App1</a></li> <li><a href="http://localhost:5002">打开App2</a></li> <li><a href="http://localhost:5003">打开App3</a></li> </ul> </body> </html>
3. 启动方式
打开4个终端,分别运行index.py、app1.py、app2.py、app3.py,即可通过主页面链接跳转到对应端口的子应用。
你之前尝试失败的原因
- 直接导入子应用的
app实例会导致多个Flask实例冲突,路由和配置互相覆盖,无法正常运行。 - 重定向无效大概率是因为子应用未在指定端口启动,或者链接地址写错,导致跳转目标不可达。
内容的提问来源于stack exchange,提问作者Omkar Kabde
相关产品推荐
相关产品推荐

