Рекомендуется использовать файл базовых настроек для определения общих настроек, которые могут быть переопределены переменными среды. Таким образом, настройки вашей базы данных могут выглядеть так:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': os.environ.get('DATABASE_HOST', 'localhost'),
'PORT': os.environ.get('DATABASE_PORT', '3306'),
'USER': os.environ.get('DATABASE_USER', 'root'),
'PASSWORD': os.environ.get('DATABASE_PASSWORD', ''),
'NAME': os.environ.get('DATABASE_NAME'),
},
}
Пример, который вы предоставили, является хорошей практикой, но я бы избегал конкретных файлов для человека или, если можно, конкретных локальных настроек. Вместо этого посмотрите, есть ли переменные окружения для учета того, что иначе получило бы свой собственный файл настроек. Таким образом, меньше кода для поддержки и легко настраивается на каждом сервере / среде. Каждая среда, в которой работает ваш проект, будет определять DJANGO_SETTINGS_MODULE
в переменных среды, чтобы сообщить django, какие настройки использовать.
Используйте специфические для среды файлы настроек для наследования базы, а затем включайте такие вещи, как ведение журнала и уведомления об ошибках, если вы подписываетесь на услугу, такую как Sentry , которую вы не хотели бы интегрировать вне производства. Так что production.py
может включать дополнительные настройки безопасности, которые вы захотите при работе в этой среде;
DEBUG = False
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
И если вы обнаружите, что подход с локальными настройками работает для вас, исключите их из git, чтобы настройки конкретного человека не регистрировались, и если у них есть локальный сервер базы данных, им не нужно беспокоиться о том, что там пароль всегда в управлении версиями и т. д.