Flask API端点异常:注册蓝图后访问出现404错误
Flask蓝图路由404问题解决
问题核心
你的代码中,蓝图api虽然被注册到了Flask应用,但路由模块routes.py没有在应用启动时被导入,导致蓝图上的/hi路由从未被添加到应用的URL规则中,所以访问/api/hi会返回404,url_map里也只有静态文件规则。
快速修复方案
直接修改app.py,在注册蓝图后导入routes模块,确保路由被加载:
from flask import Blueprint from data.resource import app api = Blueprint('api', __name__) app.register_blueprint(api, url_prefix='/api') # 关键:注册蓝图后导入路由,让路由绑定到蓝图上 from routes import routes if __name__ == "__main__": print(app.url_map) app.run()
运行后再查看url_map,就能看到/api/hi的规则了,访问localhost:5000/api/hi也能正常返回响应。
结构优化建议(可选)
当前把Flask实例放在resource.py的结构容易引发导入混乱,建议把应用初始化逻辑移到app.py,让结构更清晰:
调整后的app.py
from flask import Flask, Blueprint import os from flask_sqlalchemy import SQLAlchemy # 初始化Flask应用 app = Flask(__name__) # 修正数据库路径,指向data目录下的persons.db base_directory = os.path.abspath(os.path.dirname(__file__)) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(base_directory, "data/persons.db") # 初始化SQLAlchemy db = SQLAlchemy(app) # 创建并注册蓝图 api = Blueprint('api', __name__) app.register_blueprint(api, url_prefix='/api') # 导入路由 from routes import routes if __name__ == "__main__": print(app.url_map) app.run()
调整后的resource.py
from sqlalchemy import Column, Integer, String, Float, Boolean from stage_two_task.app import db # 在这里定义你的数据库模型,例如: class Person(db.Model): id = Column(Integer, primary_key=True) name = Column(String(80), unique=True, nullable=False) # 其他字段根据需求添加
routes.py保持不变
from flask import jsonify, request from stage_two_task.app import api @api.route('/hi', methods=['GET']) def hello(): return jsonify(message='Hello World')
注意事项
- 确保运行应用时,当前工作目录是
stage_two_task的父目录,使用命令python -m stage_two_task.app启动,避免导入错误。 - 检查
PYTHONPATH是否包含stage_two_task的父目录,确保Python能识别stage_two_task这个包。
内容的提问来源于stack exchange,提问作者Loni
相关产品推荐
相关产品推荐

