在提供g
和服务请求之前,我想在Flask的app
字典中初始化一个条目。到目前为止,我发现的所有示例都建议进行延迟初始化,例如像这样的东西:
from flask import Flask, app, g
app = Flask(__name__)
def connect_db():
# ... assign db connection into db here ...
return db
def get_db():
if not 'db' in g:
g.db = connect_db()
return g.db
@app.route('/', methods=['GET'])
async def posts():
db = get_db()
# ... work with db here ...
return 'foo'
那很好,但就我而言,我想检查配置,并且有可能在应用程序变成Web服务器之前失败。我的connect_db
可能看起来像这样:
from flask import Flask, app, g
import os
app = Flask(__name__)
def connect_db():
url = os.environ.get('DB_URL', None)
if not url:
raise Exception('No $DB_URL')
# ... assign db connection into db here ...
return db
def get_db():
if not 'db' in g:
g.db = connect_db()
return g.db
@app.route('/', methods=['GET'])
def posts():
db = get_db()
# ... work with db here ...
return 'foo'
很明显,如果我的环境配置错误并启动此应用程序,它将继续运行,但是所有访问数据库的请求都将失败,状态为500。
全局变量是正确的解决方案吗?
总体而言,我对急切初始化g
感兴趣。我不是要解决任何特定的问题。