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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:11:11