Перейти к содержанию

Управление настройками приложения

Модуль settings реализует паттерн "Конфигурация как код" с использованием Pydantic, предоставляя типобезопасный доступ к настройкам приложения.

Особенности

  • Строгая типизация всех настроек
  • Автоматическая загрузка из переменных окружения
  • Валидация данных на этапе инициализации
  • Вычисляемые свойства для часто используемых значений
  • Поддержка расширяемой конфигурации

Документация API

Класс Settings

Основной класс для работы с настройками приложения. Наследуется от pydantic.BaseSettings.

Bases: BaseSettings

Pydantic-модель конфигурации приложения.

Source code in src/config/settings.py
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Settings(BaseSettings):
    """Pydantic-модель конфигурации приложения."""

    FASTAPI_SECRET: str
    POSTGRES_USER: str
    POSTGRES_PASSWORD: str
    POSTGRES_DB: str
    POSTGRES_PORT: int
    POSTGRES_HOST: str

    class Config:
        env_file_encoding = 'utf-8'
        extra = 'allow'

    @property
    def postgres_uri(self) -> str:
        return (
            f'postgresql+asyncpg://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}'
            f'@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}'
        )

Примеры использования

Базовое использование

from src.config.settings import Settings

# Инициализация настроек
settings = Settings()

# Доступ к настройкам
db_uri = settings.postgres_uri
secret_key = settings.FASTAPI_SECRET

Настройка окружения

  1. Создайте файл .env в корне проекта с необходимыми переменными
  2. Или установите переменные окружения напрямую в системе

Пример минимального .env файла:

FASTAPI_SECRET=your-secret-key
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_DB=dbname
POSTGRES_HOST=localhost
POSTGRES_PORT=5432

Рекомендации

  1. Безопасность
  2. Никогда не коммитьте файлы с реальными секретами в репозиторий
  3. Используйте разные настройки для разных окружений (dev/stage/prod)
  4. Храните чувствительные данные в защищенном хранилище (например, Vault)

  5. Разработка

  6. Для локальной разработки создайте файл .env.local (добавьте его в .gitignore)
  7. Используйте значения по умолчанию для некритичных настроек

  8. Тестирование

  9. Переопределяйте настройки в фикстурах тестов
  10. Используйте моки для изоляции тестов от реальных настроек

Интеграция

Модуль settings интегрируется с:

  • Pydantic для валидации и парсинга
  • FastAPI (через переменные окружения)
  • SQLAlchemy (через строку подключения)
  • Любыми другими библиотеками, поддерживающими загрузку из os.environ

Ограничения

  • Все значения загружаются при старте приложения
  • Изменения в .env файле требуют перезапуска приложения
  • Строгая типизация может потребовать дополнительной настройки для нестандартных типов данных