【问题标题】:The usage of Flask-restful routing functions is correct?Flask-restful路由功能的使用正确吗?
【发布时间】:2016-03-11 19:29:42
【问题描述】:

我可以访问/v1/folder,但无法访问/v1/folder/<folder-id>。你能告诉我原因吗?在flask-request document 中表示add_resource() 可以路由多个URI。但是我不能。也许我误解了什么。如果你找到线索,请告诉我。

from flask import request
from flask_restful import Resource, abort

class Folder(Resource):
  def post(self, folder_id):
      return { "message":"post with folder_id"}, 200


  def post(self):
      return { "message":"post without folder_id"}, 201



app = Flask(__name__)

.....

api_bp = Blueprint('api', __name__)
api = Api(api_bp, serve_challenge_on_401=True)
api.add_resource( Folder, '/v1/folder', '/v1/folder/<string:folder_id>')
app.register_blueprint(api_bp)

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True )

错误消息是“TypeError: post() got an unexpected keyword argument 'folder_id'”。怎么了?

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    Python 不支持函数/方法重载,因此您最后声明的post 方法总是会被使用。相反,您应该使用 Python 提供的工具 - 参数的默认值。

    我个人会做以下事情:

    from flask import request
    from flask_restful import Resource, abort
    
    class Folder(Resource):
      def post(self, folder_id=None):
          if folder_id is None:
              return self.__simple_post()
          else:
              return self.__parameter_post(folder_id)
    
      def __parameter_post(self, folder_id):
          return { "message":"post with folder_id"}, 200
    
      def __simple_post(self):
          return { "message":"post without folder_id"}, 201
    
    
    
    app = Flask(__name__)
    
    .....
    
    api_bp = Blueprint('api', __name__)
    api = Api(api_bp, serve_challenge_on_401=True)
    api.add_resource( Folder, '/v1/folder', '/v1/folder/<string:folder_id>')
    app.register_blueprint(api_bp)
    
    if __name__ == "__main__":
        app.run(host='0.0.0.0', debug=True )
    

    或者你可以在post 方法中处理逻辑,如果逻辑足够相似并且不太长的话。但是,如果逻辑最终无法阅读,请考虑使用我建议的方法。

    【讨论】:

    • 不客气。实际上我前几天自己也必须这样做,所以我仍然记得我是如何处理它的。
    猜你喜欢
    • 2019-04-28
    • 2022-10-24
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2019-02-28
    • 2014-02-18
    相关资源
    最近更新 更多