python-3.x - 如何导入从 create_app() 创建的应用程序实例
问题描述
我如何导入在's函数中app
创建的实例以供使用,因为该实例仅返回我的?app/app.py
create_app()
app/api.py
app
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
(在页面上搜索)
推荐阅读
- octave - 如何根据结果检查数值方法的收敛性?(八度)
- javascript - 使用 iText 从 PDF 获取 Javascript
- python-asyncio - 需要 asyncio.Future、协程或 awaitable
- javascript - 如果数字在给定范围之间,是否有一种简洁的方法来返回用于舍入数字的值?
- sql-server - SHA2_256直接比较
- python - 如何将 Azure Function 绑定到 Python 中的 blob 容器?
- php - php ftp_nlist 函数返回 504 网关超时错误
- javascript - React - 使用键名从父对象中删除子对象
- c# - React 中的 UnitTests - 方法“文本”旨在在 1 个节点上运行。找到了 0 个
- java - heroku 本地网络未处理