19

オブジェクト インスタンスをパラメーターとして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 リソースに渡す必要があることです。add_resourceのようなメソッドを介して渡す方法はありapi.add_resource(views.ApiPage, "/api/my/end/point/", instance=bar)ますか?

4

4 に答える 4

43

バージョン 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})
于 2015-11-16T17:09:32.777 に答える
3

同じ問題に苦しんだ後、私はあなたが使用できることを発見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)
于 2014-10-23T10:56:47.343 に答える
1

ドキュメントを考えると、このレベルではそのようなことはできません。この問題を回避する 1 つの方法は、の初期化をBar別のモジュール内に配置してから、ビュー モジュールのインポートを通じてインスタンスを取得することです。

于 2014-08-02T20:11:03.500 に答える