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

Flask API服务器局域网及本地访问均返回404问题求助

问题原因及解决方案

核心问题:路由未被注册

你的代码中在定义所有路由之前就调用了api.run(),这会导致Flask服务器直接启动,后续的路由装饰器(@api.route)根本没有机会执行,因此服务器上没有注册任何可用路由,所有请求都会返回默认的404错误。

看代码里的关键错误位置:

api = Flask(__name__)
api.config["DEBUG"] = True
api.config['JSON_SORT_KEYS'] = False
# 此处提前启动服务器,后续路由代码完全不会执行
api.run(host='127.0.0.1', port=5155)

# 下面的路由装饰器永远不会被处理
@api.route('/', methods=['GET'])
def home():
    ...

修复步骤

  1. 删除提前调用的api.run():移除api.run(host='127.0.0.1', port=5155)这一行,因为代码末尾的if __name__ == '__main__':块中已经有启动服务器的逻辑。
  2. 配置局域网访问:如果需要允许局域网设备访问,修改末尾的api.run(),指定host='0.0.0.0'(监听所有网卡),同时保留端口设置:
    if __name__ == '__main__':
        api.run(host='0.0.0.0', port=5155)
    

修复后完整代码示例

from flask import Flask, json, jsonify, request

companies = [{"id": 0, "name": "ACME", "state":"Essex"}, 
{"id": 1, "name": "Bluebell", "state":"Hertfordshire"}
]

users = [{"company":"ACME","name": "Steve Herbert", "employeeID":"125785", "email":"sherbert@acme.com"}, 
{"company":"ACME","name": "Steve Herbert", "employeeID":"125785", "email":"sherbert@acme.com"}
]

api = Flask(__name__)
api.config["DEBUG"] = True
api.config['JSON_SORT_KEYS'] = False

# 先定义所有路由
@api.route('/', methods=['GET'])
def home():
    return "<h1>Company Directory</h1><p>This site is a prototype API for company directory listing.</p>"

@api.route('/api/companies/all', methods=['GET'])
def get_companies():
    return jsonify(companies)
    
@api.route('/api/companies', methods=['GET'])
def get_company():
    print('req' + str(request.args))
    print('hello' + next(iter(request.args.keys())))
    
    if 'id' in request.args:
        filter = next(iter(request.args.keys()))
        param = int(next(iter(request.args.values())))
    elif 'name' in request.args:
        filter = next(iter(request.args.keys()))
        param = str(next(iter(request.args.values())))
    else:
        return "Error: No param field provided. Please specify a value."
        
    results = apiParam(param, filter, companies)
    return jsonify(results)
    

def apiParam(param, filter, list):
    print('filter' + str(filter))
    results = []
    for li in list:
        if li[filter] == param:
            results.append(li)
    return results
  
     
if __name__ == '__main__':
    # 最后启动服务器,支持局域网访问
    api.run(host='0.0.0.0', port=5155)

修改完成后,本地访问http://127.0.0.1:5155或局域网设备通过服务器IP(如http://192.168.1.x:5155)访问,都能正常匹配路由,不会再返回404错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:35:36