FastAPI – это современный веб-фреймворк для создания API на Python 3.7+/
Как и во многих других фреймворках, в FastAPI предусмотрена работа с переменными окружения для управления конфигурацией.
Хранение конфигураций в файле .env является общепринятой практикой, которая позволяет отделить конфигурацию от кода приложения, что делает ее более удобной в управлении и безопасной.
В этой статье мы рассмотрим, как интегрировать и использовать .env-файлы в приложении FastAPI.
- Зачем нужен файл .env?
- Начало работы с .env в FastAPI
- 1. Установите необходимые пакеты:
- 2. Создайте файл .env:
- 3. Чтение файла .env в FastAPI:
- 4. Использование загруженных переменных окружения:
- Расширенные возможности использования:
- 1. Использование окружений с FastAPI Config:
- 2. Переопределение конфигураций для тестирования:
- Заключение
Зачем нужен файл .env?
- Разделение: Храните конфигурации отдельно от кода приложения.
- Безопасность: Избегайте хардкодинга конфиденциальной информации в исходном коде.
- Переносимость: Легкое переключение между различными конфигурациями в зависимости от среды (разработка, тестирование, продакшен и т.д.).
Начало работы с .env в FastAPI
Как и другие Python-фреймворки, FastAPI также использует пакет python-dotenv для загрузки файлов `.env` в системное окружение.
Затем они используются в приложении.
1. Установите необходимые пакеты:
Для работы с файлами `.env` мы будем использовать библиотеку python-dotenv.
Установите ее с помощью pip:
2. Создайте файл .env:
Создайте файл `.env` в корне проекта.
Например:
DB_URL=postgresql://username:password@localhost:5432/mydatabase
SECRET_KEY=mysecretkey
DEBUG=True
3. Чтение файла .env в FastAPI:
Вы можете загрузить файл `.env` при запуске приложения.
Ниже приведен Python-скрипт, использующий функцию `load_dotenv` из пакета dotenv для загрузки переменных из файла `.env` в окружение системы.
После загрузки файла .env код извлекает специфические переменные окружения, такие как “DB_URL”, “SECRET_KEY” и “DEBUG”, с помощью функции os.getenv.
from fastapi import FastAPI
import os
from dotenv import load_dotenv
app = FastAPI()
# Load .env file
load_dotenv()
DB_URL = os.getenv("DB_URL")
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = os.getenv("DEBUG") == "True"
4. Использование загруженных переменных окружения:
Теперь, когда переменные загружены, вы можете использовать их в своем приложении.
@app.get("/")
def read_root():
return {"DB_URL": DB_URL, "Debug Mode": DEBUG}
Расширенные возможности использования:
1. Использование окружений с FastAPI Config:
Для дополнительной организации и проверки типов наших конфигураций мы можем использовать пакет типа pydantic:
Затем определите модель конфигурации:
from pydantic import BaseSettings
class Settings(BaseSettings):
DB_URL: str
SECRET_KEY: str
DEBUG: bool = False
class Config:
env_file = ".env"
Загрузите конфигурации:
settings = Settings()
@app.get("/config/")
def read_config():
return {"DB_URL": settings.DB_URL, "Debug Mode": settings.DEBUG}
В pydantic переменные окружения автоматически приводятся к правильным типам, что делает работу с конфигурациями более безопасной.
2. Переопределение конфигураций для тестирования:
При написании тестов может потребоваться использование различных конфигураций.
Библиотека python-dotenv позволяет указать путь к файлу .env, поэтому для тестирования можно использовать отдельный файл `.env.test`:
# For testing, load a different .env file
load_dotenv(".env.test")
Заключение
Использование .env-файла в FastAPI-приложениях упрощает управление конфигурациями, повышает безопасность и разделение задач.
С помощью дополнительных инструментов, таких как pydantic, можно обеспечить проверку типов в конфигурациях для раннего выявления потенциальных проблем.
Независимо от того, занимаетесь ли вы локальной разработкой, развертыванием на продакшене или тестированием, использование .env-файлов упрощает управление настройками, специфичными для конкретной среды.
см. также:
- 🐧 Как хэшировать пароли в системах Linux
- 🐍 Как парсить и скрейпить HTML с помощью Pyquer
- 🐍 Получение всех IP-адресов из подсети CIDR с помощью Python3
- 🐍 Возможности использования Poetry в Python
- Использование Python для проведения тестирования на проникновение