Flask-RESTful应用访问触发GET而非POST返回405错误该如何解决?
错误原因
你的Route资源类仅实现了post方法,仅支持POST类型的请求,而浏览器直接访问服务地址时默认发送GET请求,Flask-RESTful没有匹配到对应请求的处理逻辑,因此返回405 Method Not Allowed错误。
解决方案
你可以根据业务需求选择以下任意一种方案解决:
- 方案1:添加GET请求处理逻辑
如果需要支持浏览器直接访问,在Route类中补充实现get方法即可,修改后的代码参考如下:
from flask import Flask from flask_restful import Api, Resource app = Flask(__name__) api = Api(app) class Route(Resource): def post(self): return "Posted" # 新增GET请求处理方法 def get(self): return "请求成功" api.add_resource(Route, '/') if __name__ == '__main__': app.run(debug=True)
修改后重启服务,再次用浏览器访问即可正常获取返回结果。
方案2:使用POST方式调用接口
如果接口设计上仅允许POST请求,无需支持GET,使用专门的调试工具发送POST请求即可,比如可以用curl工具执行如下命令:curl -X POST http://127.0.0.1:5000
也可以使用Postman、Apifox等可视化接口调试工具,选择请求方法为POST后访问对应地址,即可拿到预期的"Posted"返回结果。方案3:自定义405错误返回(可选)
如果需要统一处理站点内所有405错误的返回内容,可以添加全局错误处理器,示例代码如下:
@app.errorhandler(405) def handle_405_error(e): return {"msg": "当前接口不支持该请求方法,请确认请求类型后重试"}, 405
内容的提问来源于stack exchange,提问作者Malice
相关产品推荐
相关产品推荐

