Flask Restful添加资源参数

Gun*_*her 9 python rest flask flask-restful

我希望将对象实例作为参数传递给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/")
Run Code Online (Sandbox Code Playgroud)

然后在views.py中我将资源设置如下:

# In views.py
from flask.ext.restful import Resource

class ApiPage(Resource):
    def get(self):
        serialized = str(my_bar)
        return serialized
Run Code Online (Sandbox Code Playgroud)

所以我遇到的问题是我需要将我的实例传递给Bar()api资源.有没有办法通过这样的add_resource方法传递它api.add_resource(views.ApiPage, "/api/my/end/point/", instance=bar)

el.*_*omo 24

从版本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
Run Code Online (Sandbox Code Playgroud)

以及相关代码main.py:

# ...
my_bar = Bar()
api.add_resource(views.ApiPage, '/api/my/end/point/',
                 resource_class_kwargs={'bar': my_bar})
Run Code Online (Sandbox Code Playgroud)


ron*_*ron 7

在 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})
Run Code Online (Sandbox Code Playgroud)

add_resource方法中传递您的对象并在资源 init 方法中使用它

并在您的班级 init 中

class ApiPage(Resource):
    def __init__(self, **kwargs):
       self.my_bar= kwargs['my_bar']
Run Code Online (Sandbox Code Playgroud)