Оскільки тема регулярно виникає, дозвольте мені підсумувати, чому ви можете розглянути такий підхід:
німий файл налаштувань дуже швидко і легко змінюється; особливо у виробничому середовищі. Питон не потрібен: будь-який ідіот може заскочити і змінити пароль бази даних у файлі, в якому просто вказані імена та значення; особливо у порівнянні зі складним файлом налаштувань python, повним таємничих небезпечних імен BIGCAPS.
заявка settings
повинна бути повністю відокремлена від програми code
. Ви можете поставити config.ini поза коренем сховища і більше ніколи не турбуватися про те, що репо витягує ваші налаштування, чи ваші особисті налаштування забруднюють репо, або про той розумний код у ваших налаштуваннях. .
Це не стосуватиметься невеликих проектів, але для великих проектів я дійшов висновку, що стратегія local_settings просто не вирізає її; з часом вкрадається достатньо програм програмування, що стає важко впоратися; насамперед у міру того, як налаштування стають похідними та / або взаємозалежними. Можуть бути хороші обґрунтування для того, щоб налаштування реагували відповідно до локальних налаштувань, що змушує імпорт local_settings
файлу повзати до середини settings.py
. Я вважаю, що все починає бути безладним, коли це трапляється.
Моє поточне рішення - використовувати config
файл, я називаю його "local.ini". Він містить лише ті значення, які насправді змінюються між розгорнутими екземплярами. Коду не існує: це лише значення та логічні значення:
[global]
domain = 127.0.0.1:8000
database_host = 127.0.0.1
database_name = test_database
debug = Yes
google_analytics_id = UA-DEV-1
payments = testing
use_cdn = No
Завдяки цьому я можу поводитися з settings.py
будь-яким іншим фрагментом коду програми: налаштувати його, зареєструвати та розгорнути, не турбуючись про тестування будь-якого коду, який може ховатися в коді python local_settings. У моїй програмі settings.py
відсутні умови перегонів, які виникають тоді, коли пізніші налаштування залежать від місцевих налаштувань, і я можу вмикати та вимикати функції, записуючи простий для слідування лінійний код. Більше не потрібно поспішно налаштовувати файл local_settings, коли я забув додати якесь нове значення, і більше немає, daves_local_settings.py
а bobs_local_settings.py
файли пробираються до сховища.
from ConfigParser import RawConfigParser
parser = RawConfigParser()
APPLICATION_ROOT = path.abspath(path.dirname(__file__))
parser.readfp(open(path.join(APPLICATION_ROOT, 'local.ini')))
DATABASE_HOST = parser.get('global', 'database_host')
DATABASE_NAME = parser.get('global', 'database_name')
from version import get_cdn_version
CDN = 'd99phdomw5k72k.cloudfront.net'
if parser.getboolean('global', 'use_cdn'):
STATIC_URL = '/{}/static/{}/'.format(CDN, get_cdn_version())
else:
STATIC_URL = '/static/'
payments = parser.get('global', 'payments')
if payments == 'testing':
PAYMENT_GATEWAY_ENDPOINT = 'https://api.sandbox.gateway.com'
else:
PAYMENT_GATEWAY_ENDPOINT = 'https://api.live.gateway.com'
Якщо ви стикаєтеся з BOFH , як це було в мене одного разу, він особливо схвилювався завдяки можливості вставити файл local.ini
у /etc
каталог, /etc/ourapp.ini
і, таким чином, зберігати сам каталог додатків як чистий експорт сховища. Звичайно, ви могли це зробити за допомогою local_settings.py, але останнє, що він хотів зробити, це возитися з кодом python. Простий конфігураційний файл, з яким він міг впоратися.