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