python flask-restful не может получить доступ к приложению в классе ресурсов
Вот пример кода из колбы-спокойного документа
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 ответ
У вас есть круговой импорт; когда линия 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
внутри функции или метода, вызываемого позднее.