Python Flask restful路由函数的使用是否正确?

Python Flask restful路由函数的使用是否正确?,python,flask,flask-restful,Python,Flask,Flask Restful,我可以访问/v1/文件夹,但无法访问/v1/文件夹。你能告诉我原因吗?在所述的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

我可以访问
/v1/文件夹
,但无法访问
/v1/文件夹
。你能告诉我原因吗?在所述的
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 )
来自flask导入请求
从restful导入资源中,中止
类文件夹(资源):
def post(自我,文件夹id):
返回{“message”:“post with folder_id”},200
def post(自我):
返回{“message”:“post without folder_id”},201
app=烧瓶(名称)
.....
api\u bp=蓝图('api',\u名称\u)
api=api(api\U bp,发球\U挑战\U 401=True)
api.add_资源(文件夹“/v1/Folder”、“/v1/Folder/”)
应用程序注册蓝图(api\U bp)
如果名称=“\uuuuu main\uuuuuuuu”:
app.run(host='0.0.0.0',debug=True)

错误消息是“TypeError:post()获取了意外的关键字参数‘folder_id’”。怎么了

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 )
来自flask导入请求
从restful导入资源中,中止
类文件夹(资源):
def post(自我,文件夹_id=None):
如果文件夹\u id为“无”:
返回self.\uuu simple\u post()
其他:
返回self.\u参数\u post(文件夹\u id)
def参数post(自身、文件夹id):
返回{“message”:“post with folder_id”},200
def___simple_post(self):
返回{“message”:“post without folder_id”},201
app=烧瓶(名称)
.....
api\u bp=蓝图('api',\u名称\u)
api=api(api\U bp,发球\U挑战\U 401=True)
api.add_资源(文件夹“/v1/Folder”、“/v1/Folder/”)
应用程序注册蓝图(api\U bp)
如果名称=“\uuuuu main\uuuuuuuu”:
app.run(host='0.0.0.0',debug=True)

或者,如果逻辑足够相似且不太长,可以在
post
方法中处理逻辑。如果逻辑最终是不可读的,请考虑使用我提出的方法。

欢迎你。事实上,几天前我自己也必须这样做,所以我仍然记得我是如何处理的。