Колба, инициализируйте g перед обслуживанием запросов - PullRequest
0 голосов
/ 16 декабря 2018

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

...