1

晚上好,

我在让flask-restful为我工作时遇到了一些严重的麻烦,它应该很简单,而且过去一直是这样,但我试图以不同的格式加载我的库,但我一直遇到这个错误。

我对python很陌生,所以我确信我犯了一些简单的错误。

我基于我的结构并从这个骨架上加载动态https://github.com/imwilsonxu/fbone

基础是这个在我的扩展文件中我定义了这个

from flask.ext import restful
api= restful.Api()

然后在我的 app.py 文件中执行此操作

app = Flask(app_name, instance_path=INSTANCE_FOLDER_PATH, instance_relative_config=True)
configure_app(app, config)
configure_blueprints(app, blueprints)
configure_extensions(app)


def configure_extensions(app):
  # Flask-restful
  api.init_app(app)

然后最后在给定的蓝图中,我正在导入 api 并在那里尝试 hello world 示例

from sandbox.extensions import api

class HelloWorld(restful.Resource):
def get(self):
    return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

这是我得到的错误。

AttributeError:“Api”对象没有属性“端点”

任何帮助将不胜感激。

4

1 回答 1

3

您收到此错误的原因是您试图在 api 对象引用 Flask 应用程序的有效实例之前将其添加到 api 对象中。

解决此问题的一种方法是将所有 add_resource 调用包装在一个单独的函数中,然后在初始化应用程序和扩展后调用此函数。

在你的蓝图中——

from sandbox.extensions import api

class HelloWorld(restful.Resource):
def get(self):
    return {'hello': 'world'}

def add_resources_to_helloworld():
    """ add all resources for helloworld blueprint """
    api.add_resource(HelloWorld, '/')

在 app.py 中

def configure_extensions(app):
  # initialize api object with Flask app
  api.init_app(app)

  # add all resources for helloworld blueprint
  add_resources_to_helloworld()

这将确保只有在 api 对象引用了已初始化的 Flask 应用程序后,资源才会添加到您的应用程序中。在调用 init_app(app) 之后。

于 2013-09-19T19:34:21.227 回答