Колба, инициализируйте 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
в общем. Я не пытаюсь решить какую-то конкретную проблему.