Flask使用GET请求获取单个游戏时Postman返回404错误如何解决
问题原因
- 未给获取单个游戏的视图函数绑定正确的
@app.route路由装饰器,也没有显式指定允许GET请求,导致服务端根本没有注册对应路径的接口,请求时直接返回404。 - 现有视图函数的逻辑错误:仅对POST请求做了返回处理,你需要的GET请求没有对应的返回分支,就算路由配置正确也会触发异常。
- 存在命名冲突问题:模型层查询方法和视图函数都命名为
get_game,调用时可能出现预期外的错误。 - 路径参数传值错误:若请求时gamename包含特殊字符、空格未做URL转义,或者拼写和库中存储的gamename不一致,也可能触发匹配异常。
修复方案
修正后的视图层代码如下:
# 绑定路由,明确指定允许GET方法,视图函数改名避免和模型方法冲突 @app.route('/api/games/<gamename>', methods=['GET']) def get_single_game(gamename): # 调用模型层方法查询对应游戏 game = game_model.get_game(gamename) if game: # MongoDB返回的_id是ObjectId类型,不能直接json序列化,需先转成字符串 game['_id'] = str(game['_id']) return jsonify(game), 200 # 未查询到对应游戏时返回404提示 else: return jsonify({"msg": "指定游戏不存在"}), 404
额外注意事项:
- 启动Flask服务后,请求的URL要把
<gamename>替换成实际的游戏名,比如查询名为GTA5的游戏,请求地址应为http://localhost:5000/api/games/GTA5,不要保留尖括号。 - 如果游戏名包含空格、中文等特殊字符,需要先做URL编码后再请求,避免路径匹配失败。
- 确认全局已经导入
jsonify、request等Flask依赖模块。
内容的提问来源于stack exchange,提问作者Christian Chim
相关产品推荐
相关产品推荐

