我可以访问/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 )
错误消息是&#34; TypeError:post()得到了一个意外的关键字参数&#39; folder_id&#39; &#34 ;.怎么了?
答案 0 :(得分: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
方法中的逻辑,如果逻辑足够相似且不太长。但是,如果逻辑最终不可读,请考虑使用我建议的方法。