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

使用uWSGI运行Flask应用时路由未加载,如何解决?

问题原因

你遇到的核心问题是:start.wsgi中创建了一个全新的Flask应用实例,但aircraft_tracker.py里的路由是注册在它自身创建的另一个独立实例上的,两者没有关联,导致uWSGI加载的实例没有任何路由。

解决方案(两种优雅方式,无循环依赖)

方案1:快速复用已注册路由的应用实例

修改start.wsgi,直接导入aircraft_tracker里已经绑定好路由的app实例:

from aircraft_tracker import app as application

同时在wsgi.ini中添加Python路径配置,确保uWSGI能识别你的项目模块:

wsgi-file = /aircraft/start.wsgi
pythonpath = /aircraft  # 指定项目根目录为Python搜索路径

这种方式无需调整现有代码结构,快速解决问题,但路由分散在主文件中,后续扩展多路由时会增加维护成本。

方案2:应用工厂+路由注册(推荐,符合Flask最佳实践)

将路由逻辑整合到app包内部,通过注册函数绑定到应用实例,更利于长期维护:

  1. 在app目录下新建routes.py,封装路由注册逻辑:
def register_routes(app):
    @app.route('/aircraft', methods=['GET'])
    def get_aircraft():
        """Return a list of all active aircraft"""
        # 替换为你的实际业务逻辑
        aircraft = []
        return aircraft
  1. 修改app/__init__.py,在应用工厂中调用路由注册:
from flask import Flask
import settings
from .routes import register_routes

def create_app():
    flask_app = Flask(settings.APP_NAME)
    flask_app.config.from_prefixed_env()
    
    # 绑定所有路由到当前应用实例
    register_routes(flask_app)
    
    return flask_app
  1. 简化aircraft_tracker.py,仅保留开发环境启动入口:
from app import create_app

app = create_app()

if __name__ == "__main__":
    app.run(host="0.0.0.0")
  1. start.wsgi保持原有代码即可:
from app import create_app
application = create_app()

这种方式遵循Flask应用工厂模式,路由集中管理,后续添加新路由只需扩展routes.py,完全避免循环依赖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:30:36