python flask-restful无法在资源类中获取应用程序访问权限

时间:2014-02-11 16:35:15

标签: python flask flask-restful

以下是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等信息,如何才能使其正常工作?

1 个答案:

答案 0 :(得分:6)

你有一个循环导入;当行from resource.HelloWorld import HelloWorld执行时,尚未分配app,因此在Helloworld.py中,行from 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)

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

from flask.ext import restful
import app

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

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