在此处发布的Flask-RESTful示例应用程序中,集合是一个全局变量。TODOS
Todo 资源注册后:
api.add_resource(Todo, '/todos/<string:todo_id>')
Run Code Online (Sandbox Code Playgroud)
这些方法在处理 Web 请求时Todo访问全局变量。TODOS
相反,我想在类中实例化 API 并传递一个TODOS作为类变量而不是全局变量的集合。
使用Flask-RESTful时,允许Resource类中的方法在不使用全局变量的情况下访问调用类提供的变量的正确方法是什么?
add_resource接受两个参数resource_class_args和resource_class_kwargs,用于将参数传递给构造函数。(来源)
所以你可以有一个资源:
from flask_restful import Resource
class TodoNext(Resource):
def __init__(self, **kwargs):
# smart_engine is a black box dependency
self.smart_engine = kwargs['smart_engine']
def get(self):
return self.smart_engine.next_todo()
Run Code Online (Sandbox Code Playgroud)
您可以将所需的依赖项注入到 TodoNext 中,如下所示:
smart_engine = SmartEngine()
api.add_resource(TodoNext, '/next',
resource_class_kwargs={ 'smart_engine': smart_engine })
Run Code Online (Sandbox Code Playgroud)
看来我第一次没理解你的意思,你可以直接使用 aclassmethod来构建你的 API。然后将其添加为资源
from flask import Flask
from flask.ext.restful import Api
class SomeApi(Resource):
def get(self):
return self.response
@classmethod
def make_api(cls, response):
cls.response = response
return cls
class KillerApp(object):
def __init__(self):
self.app = Flask()
app_api = Api(self.app)
MyApi = SomeAPI.make_api({"key": "value"})
app_api.add_resource(MyApi, "/api/path")
def run(self)
self.app.run()
KillerApp().run()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14726 次 |
| 最近记录: |