オブジェクトインスタンスをパラメータとして Flask-RESTfull リソースに渡そうとしています。
これが私の設定です:
_# in main.py
from flask import Flask
from flask.ext.restful import Api
from bar import Bar
from foo import views
app = Flask(__name__)
api = Api(app)
my_bar = Bar()
api.add_resource(views.ApiPage, "/api/my/end/point/")
_
次に、views.pyで、リソースを次のように設定します。
_# In views.py
from flask.ext.restful import Resource
class ApiPage(Resource):
def get(self):
serialized = str(my_bar)
return serialized
_
したがって、私が抱えている問題は、Bar()
のインスタンスをAPIリソースに渡す必要があるということです。 api.add_resource(views.ApiPage, "/api/my/end/point/", instance=bar)
のような_add_resource
_メソッドを介してそれを渡す方法はありますか?
バージョン0.3.3(2015年5月22日リリース)以降、add_resource()
はパラメーターをResource
コンストラクターに渡すことができます。
元の例に続いて、ここにviews.py
があります。
from flask.ext.restful import Resource
class ApiPage(Resource):
def __init__(self, bar):
self.bar = bar
def get(self):
serialized = str(my_bar)
return serialized
そして、main.py
に関連するコード:
# ...
my_bar = Bar()
api.add_resource(views.ApiPage, '/api/my/end/point/',
resource_class_kwargs={'bar': my_bar})
バージョン0.3.5 ドキュメント この方法で実行できます
# in main.py
...
my_bar = Bar()
api.add_resource(views.ApiPage, '/api/my/end/point/',
resource_class_kwargs={'my_bar': my_bar})
オブジェクトをadd_resource
メソッドに渡し、それをリソースinitメソッドで使用します
そしてあなたのクラスのinitで
class ApiPage(Resource):
def __init__(self, **kwargs):
self.my_bar= kwargs['my_bar']
同じ問題に苦労した後、add_url_rule
をas_view
と組み合わせて使用できることがわかりました
だからあなたの場合、コードは次のようになると思います
class ApiPage(Resource):
def __init__(self, bar=None)
self.__my_bar=bar
def get(self):
serialized = str(self.__my_bar)
return serialized
my_bar = Bar()
app = Flask(__name__)
app.add_url_rule('/api/my/end/point/', bar=my_bar)
api = Api(app)
documentation を考えると、このレベルではそのようなことはできません。この問題を回避する1つの方法は、Bar
の初期化を別のモジュール内に配置し、ビューモジュールのインポートを介してインスタンスをフェッチすることです。