Flask Restful添加资源参数

2024-05-02 21:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望将对象实例作为参数传递到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))传入?


Tags: 实例frompyimportaddapiflaskmy
3条回答

在与同样的问题斗争之后,我发现您可以使用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)

在0.3.5版中documentation可以这样做

# in main.py
...
my_bar = Bar()
api.add_resource(views.ApiPage, '/api/my/end/point/',
             resource_class_kwargs={'my_bar': my_bar})

add_resource方法中传递对象并在resource in it方法中使用它

在你的班级里

class ApiPage(Resource):
    def __init__(self, **kwargs):
       self.my_bar= kwargs['my_bar']

由于版本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})

相关问题 更多 >