【问题标题】:python flask-restful cannot get app access in resource classpython flask-restful 无法在资源类中获取应用程序访问权限
【发布时间】:2014-02-11 16:35:15
【问题描述】:

这是来自flask-restful doc的示例代码

from flask import Flask
from flask.ext import restful

app = Flask(__name__)
api = restful.Api(app)

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

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)

HelloWorld 类在同一个 python 文件中,比如app.py,它可以工作。

现在我要将HelloWorld 类放到一个单独的类文件中,如下布局:

app
app/__init__.py # hold above code except the HelloWorld class.
app/resource
app/resource/__init__.py # empty
app/resource/HelloWorld.py # hold the above HelloWorld class.

app/__init__.py 包含:

from flask import Flask
from flask.ext import restful
from resource.HelloWorld import HelloWorld

app = Flask(__name__)
api = restful.Api(app)

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)

HelloWorld.py 是:

from flask.ext import restful
from app import app

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

运行应用程序会出现异常:

ImportError: No module named app on HelloWorld.py

我确实需要访问应用程序来读取一些信息,例如app.config,我怎样才能使它工作?

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    你有一个循环导入;当from resource.HelloWorld import HelloWorld 行执行时,app 尚未分配,因此在Helloworld.pyfrom app import app 行失败。

    稍后导入HelloWorld

    from flask import Flask
    from flask.ext import restful
    
    app = Flask(__name__)
    api = restful.Api(app)
    
    from resource.HelloWorld import HelloWorld
    api.add_resource(HelloWorld, '/')
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    或只导入HelloWorld.py 中的app 模块:

    from flask.ext import restful
    import app
    
    class HelloWorld(restful.Resource):
        def get(self):
            return {'hello': 'world'}
    

    并在稍后调用的函数或方法中引用app.app

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 2011-10-14
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多