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
等信息,如何才能使其正常工作?
答案 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
。