Управление функциями helper/utils и их конфиденциальными данными в django

Я интегрирую API третьей стороны (скажем, для отправки OTP на мобильные телефоны), и я хочу, чтобы моя система была ГИБКОЙ но БЕЗОПАСНОЙ в то же время, рассмотрим:

  1. Lets suppose right now I am using a vendor named msg91.com for sending SMS/OTP to customers.
  2. But in future I might switch to some other vendor (say way2sms.com) for the same service owing to various reasons (say cost/testing/production).

У меня есть несколько вспомогательных функций для их интеграции, рассмотрим псевдокод:

if SMS_VENDOR == 'MSG91':
    msg91_helper_function():
        # do some processing specific to vendor
        # authenticate with msg91
        # send SMS/OTP

# ------------------------------------------------------------------

elif SMS_VENDOR == 'WAY2SMS':
    way2sms_helper_function():
            # do some processing specific to vendor
            # authenticate with way2sms
            # send SMS/OTP

Я знаю, что обычно люди имеют utils.py или helpers.py файл в одном приложении django (обычно с именем common). но проблема заключается в следующем:

У каждого поставщика есть свои собственные конфиденциальные данные, такие как auth_token, которые я не могу хранить непосредственно в вспомогательных функциях (поскольку код будет общим).

Что я хочу: Как мне безопасно хранить эти auth_token как чувствительные КОНСТАНТЫ при сохранении моей системы гибкой

.

Первый подход

Хранить их в файле .env ( затем добавить его в .gitignore) и затем получать их как:

from decouple import config
msg91_auth_key = congif('MSG91_AUTH_KEY')

Это тот же способ, который мы используем для защиты SECRET_KEY и других конфиденциальных данных settings.py с помощью python decouple lib. docs

pip install python-decouple

Второе приближение

Хранение их в Базе Данных и получение их оттуда как:

enter image description here

Второй подход кажется мне более гибким, но менее безопасным и более сложным и медленным, есть множество вспомогательных функций для различных утилит, например:

  1. For SMS Vendor
  2. Fore URL Shortner Vendor ... etc

Есть ли другой лучший подход для управления такими многочисленными вспомогательными функциями и их конфиденциальными данными? ( желательно все в одном месте)

Вернуться на верх