烧瓶,在提供请求之前初始化g

时间:2018-12-16 00:57:29

标签: flask initialization global eager

在提供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感兴趣。我不是要解决任何特定的问题。

0 个答案:

没有答案