![](/img/trans.png)
[英]Accepting multiple parameters in flask-restful add_resource()
[英]Flask Restful add resource parameters
我希望将对象实例作为参数传递给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)
?
从版本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']
鉴于文档这样的事情不能在这个级别完成。 解决此问题的一种方法是将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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.