2015-12-07 67 views
0

我可以訪問/v1/folder,但無法訪問/v1/folder/<folder-id>。你能告訴我原因嗎?在flask-request document表示add_resource()可以路由多個URI。但是我不能。也許我誤解了一些東西。請告訴我,如果你找到線索。Flask-restful路由功能的使用是否正確?

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) 

錯誤消息是 「類型錯誤:後()得到了一個意想不到的關鍵字參數 'folder_id'」。怎麼了?

回答

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方法,如果邏輯是很相似並不算太長。但是,如果邏輯最終不可讀,請考慮使用我建議的方法。

+0

好的,它的工作原理。謝謝。我忘了基本的語法問題... –

+0

非常歡迎。我自己幾天前還必須這樣做,所以我仍然記得我是如何處理它的。 – Kendas