Колба, инициализируйте g перед обслуживанием запросов

Я хотел бы инициализировать запись в Flask's g словарь перед предоставлением 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'

Это прекрасно, но в моем случае я хотел бы проверить конфигурацию и, возможно, завершить работу до того, как приложение превратится в веб-сервер. мой 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 ответов

Другие вопросы по тегам