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(): ...
修复步骤
- 删除提前调用的
api.run():移除api.run(host='127.0.0.1', port=5155)这一行,因为代码末尾的if __name__ == '__main__':块中已经有启动服务器的逻辑。 - 配置局域网访问:如果需要允许局域网设备访问,修改末尾的
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
相关产品推荐
相关产品推荐

