web-dev-qa-db-ja.com

Flask安らかなリソース追加パラメーター

オブジェクトインスタンスをパラメータとして 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_メソッドを介してそれを渡す方法はありますか?

13
Gunther

バージョン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})
32
el.atomo

バージョン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']
5
ron

同じ問題に苦労した後、add_url_ruleas_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)
2
Leon

documentation を考えると、このレベルではそのようなことはできません。この問題を回避する1つの方法は、Barの初期化を別のモジュール内に配置し、ビューモジュールのインポートを介してインスタンスをフェッチすることです。

1
Ketouem