已注册url_prefix的Flask Blueprint路由为何返回404?
问题分析与解决方案
核心遗漏:路由未被蓝图加载
你的app_views蓝图创建后,index.py里定义的/status路由并没有被蓝图关联上,Flask无法识别这些路由,导致404。常见的解决方式有两种:
方式1:在api/v1/views/__init__.py中导入index.py
在创建蓝图的文件里,导入定义路由的模块,确保路由被注册到蓝图上:
# api/v1/views/__init__.py from flask import Blueprint app_views = Blueprint('app_views', __name__) # 导入index.py,让路由注册到app_views蓝图 from api.v1.views.index import *
注:这里蓝图创建时无需重复设置url_prefix,因为你已经在app.py注册蓝图时指定了/api/v1,重复设置会导致路由路径叠加,引发404
方式2:在api/v1/app.py中导入路由模块
如果不想在蓝图的__init__.py里导入,可以在运行应用的文件中导入路由文件,确保路由被加载:
# api/v1/app.py from flask import Flask from api.v1.views import app_views # 导入index.py,加载路由 from api.v1.views.index import * app = Flask(__name__) app.register_blueprint(app_views, url_prefix="/api/v1") if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
额外检查点
- 确认
index.py中的路由确实绑定到app_views蓝图:# api/v1/views/index.py from api.v1.views import app_views @app_views.route('/status') def status(): return {"status": "OK"} - 检查启动应用时是否运行的是
api/v1/app.py,避免启动了其他未注册蓝图的Flask实例。
内容的提问来源于stack exchange,提问作者Marlon
相关产品推荐
相关产品推荐

