@Antigo_ptz

Django настройки?

Ребят, вопрос таков.
В проекте Django есть файл с настройками settings.py. Я хочу сделать настройки более читабельными, такого вида:
DATABASE_NAME = 'db'
DATABASE_HOST = '192.168.1.22' и т.п
и вынести в файл settings.ini за пределы проекта, а в файле settings.py читать их из settings.ini посредством стандартной питоновской библиотеки configparser https://docs.python.org/3/library/configparser.html
В итоге в файле settings.py будет что-то подобное:
import configparser
config = configparser.ConfigParser()
config.read('/opt/settings/settings.ini')
system = config['SYSTEM']

DATABASES = {
    'default': {
        'NAME': config.get('SYSTEM', 'DATABASE_NAME'),
        'ENGINE': 'django.db.backends.postgresql',
        'USER': config.get('SYSTEM', 'DATABASE_USER'),
        'PASSWORD': config.get('SYSTEM', 'DATABASE_PASSWORD'),
        'HOST': config.get('SYSTEM', 'DATABASE_HOST'),
        'PORT': config.get('SYSTEM', 'DATABASE_PORT'),
        },
    }
 ...
 ...


файл /opt/settings/settings.ini
[SYSTEM]

DATABASE_NAME = 'db'
DATABASE_USER = 'admin'
DATABASE_PASSWORD = '12345678'
DATABASE_HOST = '192.168.1.22'
DATABASE_PORT = '5432'

Вопрос в том, как-то это повлияет на работу системы? Сам Django как работает с настройками, один раз прочитал и использует или стучится постоянно в settings.py по необходимости?
  • Вопрос задан
  • 482 просмотра
Решения вопроса 1
@deliro
Все константы держатся в оперативной памяти. Не понимаю, зачем усложнять себе жизнь и создавать ещё один слой с настройками. Да, это паршиво, что джанга хранит конфиг кодом, но это джанга. И либо создавать универсальный reusable app, либо храни как все. Пока это смотрится, как огромный костыль.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sim3x
@sim3x
Тут два измерения проблем
Первый уже описал Роман - есть несколько типов настроек - прод, тест, дев
Они могут иметь различия
Все настроки хранятся в репозитории
Те текст открыт
Ето плохо и не безопасно

Одно из решений - переменные окружения
stackoverflow.com/a/20909045

Берем файл .env
$ cat ~/.env
DATABASE_NAME=db
DATABASE_USER=admin
DATABASE_PASSWORD=12345678
DATABASE_HOST=192.168.1.22
DATABASE_PORT=5432
SECRET_KEY=SECRET_KEY


добавляем в .bashrc

export $(cat $HOME/.env | xargs)

В настройках продавшена джанго делаем

from os import environ
# ...
SECRET_KEY = environ('SECRET_KEY')
# ...


Изменения в файл не будут подхвачены автоматом - нужно будет перезагружать uWSGI
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы