app_instance.py
from app import FlaskApp
app = None
def init_instance(env):
global app
app = FlaskApp(env)
def get_instance():
assert app is not None
return app
FlaskApp
类非常像这样
class FlaskApp(object):
def __init__(self, env):
self.oauth_manager = .... bla bla ..
self.clients_manager = .. bla bla ..
app = Flask(__name__)
app.config.from_object(env)
app = app_wrapper.wrap(app, app.config['NUM_PROXY_SERVERS'])
self.app = app
self.api = Api(self.app, prefix='/v3', default_mediatype='application/json')
self.define_routes()
# Initialize the DB
self.db = Database(self.app)
fmt = "%(asctime)s - %(request_id)s - %(name)s - %(levelname)s - %(message)s"
logging.basicConfig(format=fmt, level=self.app.config.get('LOG_LEVEL'))
request_id.init(app, prefix='MY_API_', internal=False)
def run_server(self):
self.app.run(host=self.app.config['HOST'], port=self.app.config['PORT'], debug=self.app.config['DEBUG'])
def define_routes(self):
# Configure Api Resources
self.api.add_resource(VersionListController, '/my/route', endpoint='versions')
more routes here
self.api.init_app(self.app)
在我的app控制器中
def is_valid_oauth_token(request):
from mobile_module import app_instance
app = app_instance.get_instance()
# more code here
我在localhost上运行应用程序并获取
assert app is not None
AssertionError
如何修复"这段代码?我应该在每次路径访问中导入from mobile_module import app_instance
吗?建议请
我应该声明这个应用程序在Nginx之后的生产中工作
我想我的问题更多的是关于python(如何使这项工作)和更少的烧瓶。
答案 0 :(得分:1)
该问题与get_instance
或init_instance
(create_app
等)无关。
Flask有different states。初始化app
实例(FlaskApp(env)
)时,应用程序将在请求上下文之外工作。
正如我在您的示例中看到的那样,您尝试在请求的上下文中获取应用程序(def is_valid_oauth_token(request)
)。这意味着不是应用程序的初始化。这是在请求处于活动状态时进行的处理。这是其他应用程序状态 - 应用程序已创建并在某些请求的上下文中工作。在这种情况下,您可以使用from flask import current_app
获取应用程序实例。
为了更好地了解其工作原理/使用方法,我建议您阅读flask._app_ctx_stack
,app_context()
和flask.g
。
希望这有帮助。
答案 1 :(得分:0)
我认为开发简易烧瓶应用程序的最佳方法是遵循有关简单烧瓶项目结构的官方文档here
你需要像这样组织你的floder:
select w.worker_id, w.lastname,pd.invalid
from workers w,personal_data pd
where pd.worker_id (+) = w.worker_id
and pd.invalid =nvl(:p_invalid,pd_invalid)
然后在init.py文件中创建应用程序,如下所示:
/yourapplication
/yourapplication
__init__.py
/static
style.css
/templates
layout.html
index.html
login.html
...
在您的yourapplication目录中添加run.py以使用以下代码运行应用程序:
from flask import Flask
def create_app():
"""this method will initialise the flask Ap instance """
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
return app
如果你想使用你的控制器,你可以这样做:
from yourapplication import create_app
app = create_app()
if __name__ == '__main__':
app.run()
这称为应用程序工厂design-pattern。
此外,如果您想将其投入生产,您将需要使用WSGI配置查找更多here