如何导入从 create_app() 创建的应用程序实例
How to import app instance created from create_app()
如何导入在 app/app.py
的 create_app()
函数中创建的 app
实例,以便在 app/api.py
中使用,因为 app
实例 [=36] =] 只给我 manage.py
?
我的项目结构:
project/
app/
api.py
app.py
models.py
schema.py
...
manage.py
requirements.txt
README.md
我正在使用命令 python manage.py
启动我的开发应用程序
# manage.py
from app.app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True, host='localhost', port=5000)
# app/app.py
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = config['mysql']['db_uri']
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {'pool_recycle': 3000, 'pool_pre_ping': True, }
register_extensions(app)
@app.before_first_request
def setup_logging():
gunicorn_error_logger = logging.getLogger('gunicorn.error')
app.logger.handlers.extend(gunicorn_error_logger.handlers)
app.logger.setLevel(gunicorn_error_logger.level)
return app
def register_extensions(app):
db.init_app(app)
api.init_app(app)
# app/api.py
from flask import Flask, jsonify
from flask_restful import Api, Resource
api = Api()
class TestGet(Resource):
def get(self):
app.logger.info('ok') ## Here I wish to use the app instance for logging
return 'ok'
api.add_resource(TestGet, '/ok')
如何导入 app
实例到 app/api.py
以便我可以使用 app.logger.info(...)
?
如果我调用 create_app()
它将创建一个新实例,而不是已经存在的实例 运行?
无需导入应用
您可以使用 current_app
助手。
from flask import current_app
您可以将其视为应用程序实例的代理。
官方文档链接:
https://flask.palletsprojects.com/en/1.1.x/appcontext/#the-application-context
https://flask.palletsprojects.com/en/1.1.x/api/#flask.current_app
Miguel Grinberg 也提供了有关此主题的非常好的信息:
https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xv-a-better-application-structure
(在页面上搜索current_app
)
如何导入在 app/app.py
的 create_app()
函数中创建的 app
实例,以便在 app/api.py
中使用,因为 app
实例 [=36] =] 只给我 manage.py
?
我的项目结构:
project/
app/
api.py
app.py
models.py
schema.py
...
manage.py
requirements.txt
README.md
我正在使用命令 python manage.py
# manage.py
from app.app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True, host='localhost', port=5000)
# app/app.py
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = config['mysql']['db_uri']
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {'pool_recycle': 3000, 'pool_pre_ping': True, }
register_extensions(app)
@app.before_first_request
def setup_logging():
gunicorn_error_logger = logging.getLogger('gunicorn.error')
app.logger.handlers.extend(gunicorn_error_logger.handlers)
app.logger.setLevel(gunicorn_error_logger.level)
return app
def register_extensions(app):
db.init_app(app)
api.init_app(app)
# app/api.py
from flask import Flask, jsonify
from flask_restful import Api, Resource
api = Api()
class TestGet(Resource):
def get(self):
app.logger.info('ok') ## Here I wish to use the app instance for logging
return 'ok'
api.add_resource(TestGet, '/ok')
如何导入 app
实例到 app/api.py
以便我可以使用 app.logger.info(...)
?
如果我调用 create_app()
它将创建一个新实例,而不是已经存在的实例 运行?
无需导入应用
您可以使用 current_app
助手。
from flask import current_app
您可以将其视为应用程序实例的代理。
官方文档链接:
https://flask.palletsprojects.com/en/1.1.x/appcontext/#the-application-context
https://flask.palletsprojects.com/en/1.1.x/api/#flask.current_app
Miguel Grinberg 也提供了有关此主题的非常好的信息:
https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xv-a-better-application-structure
(在页面上搜索current_app
)