Короткий ответ
Значения читаются через os.environ/os.getenv (опционально с библиотекой python-dotenv для локальной разработки) и затем помещаются в app.config, а не хардкодятся в исходном коде.
Как это работает подробнее
os.getenv('KEY', default) возвращает значение переменной окружения процесса или значение по умолчанию. Flask хранит конфигурацию приложения в словаре-подобном объекте app.config, куда удобно один раз сложить все настройки при создании приложения.
Пример кода
example.py
import os
from flask import Flask
app = Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY", "dev-only-insecure-key")
app.config["SQLALCHEMY_DATABASE_URI"] = os.environ["DATABASE_URL"] # обязательная переменная
# Проверка: запуск без переменной DATABASE_URL должен явно
# завершиться KeyError на старте, а не тихо упасть позже при запросе к БД.Что использовать на практике
- Практика. Для локальной разработки переменные окружения часто кладут в файл
.envи загружают черезload_dotenv()до чтенияos.getenv; в production переменные задаются средствами окружения (Docker, systemd, CI/CD), и.env-файл туда не попадает.
Подводные камни
- Риск. Хранят секреты (пароли, ключи) прямо в коде или в
.env, закоммиченном в git; не задают значения по умолчанию для необязательных настроек и получаютNoneтам, где ожидалась строка.