Django использует разные файлы настроек в разных средах.

Django

причина

в настоящее время используетDjangoВ процессе разработки проекта всегда будут ситуации, когда производственная среда и среда разработки должны использовать разные файлы настроек.Раньше я завершал разработку в среде разработки, загружал ее на сервер, а затем модифицировал файл настроек на сервере.Очень хлопотно, вчера случайно увидел такую ​​статьюСтруктура проекта Django и переключение производства с использованием веток Gitкоторый описывает использованиеGitСпособ переключения веток файлы настроек в разных окружениях, но если честно я не понимаю смысла этого, нужно создавать разные настройки для разных окружений?Gitветвь? может быть яGitЯ не очень хорошо в этом разбираюсь, но эта статья все же натолкнула меня на хорошую идею. Тогда я прохожуGoogleвидел другую статьюРазница между средой разработки Django и производственной средой, совместив эти две статьи, я настроил следующую схему.

план

Разделите файл настроек, установите разные переменные среды в разных средах, а затем передайтеPythonизos.environ.getМетод получает переменные среды текущей среды в соответствии с различными переменными среды.importРазличные файлы настроек:

разделить файл настроек

существуетDjangoизprojectновый каталогsettingsкаталог, а затем в соответствии с вашими потребностями вsettingsСоздайте каталог, напримерbase.py, dev.py, pro.py, test.pyТакие файлы настроек, мои потребности относительно просты и разделены толькоbase.py, dev.py, pro.pyТри файла, они представляют собой: основные настройки, настройки среды разработки и настройки производственной среды.

拆分设置文件

Установите запись для файла настроек разделения

Как правило,base.pyЗапись файла для настроек разделения

...

# 根据环境变量导入不同设置文件
# 如果环境变量中存在 ENV(具体值可行自定义)则判定为生产环境导入生产环境设置
# 否则则判定为开发环境导入开发环境设置
if os.environ.get('ENV', None):
    from .pro import *
else:
    from .dev import *

...

Изменить связанные файлы

После разделения файла настроек вам необходимо изменить файлы, которые ссылаются на файл настроек:wsgi.py, manage.py

# wsgi.py
# 修改此文件以确保通过 uwsgi 启动时程序能够正确的找到设置文件
import os
from django.core.wsgi import get_wsgi_application

# 这一行是重点,意思是添加环境变量 DJANGO_SETTINGS_MODULE 为 backend.settings.bases
# 具体值应根据个人项目的设置文件入口路径自行设置
os.environ['DJANGO_SETTINGS_MODULE'] = 'backend.settings.base'

application = get_wsgi_application()
# manage.py
# 修改此文件以确保通过 python manage.py runserver 启动时程序能够正确的找到设置文件

#!/usr/bin/env python
import os
import sys

if __name__ == '__main__':
    # 这一行是重点,意思是添加环境变量 DJANGO_SETTINGS_MODULE 为 backend.settings.bases
    # 具体值应根据个人项目的设置文件入口路径自行设置
    os.environ['DJANGO_SETTINGS_MODULE'] = 'backend.settings.base'
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

Конфигурация производственной среды

Наконец, вам нужно только установить переменные среды, которые соответствуют файлу записи в производственной среде:

# vim /etc/profile
# 在最后一行添加:
export ENV="SERVER"
# 随便设置什么值都行但是必须与入口文件匹配

начать использовать

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

Суммировать

Через схему можно увидеть два основных момента всего процесса:

  1. разделить файл настроек
  2. найти пропускPythonОчки для различения различных сред

Пока вы можете выполнить два вышеуказанных пункта, вы можете настроить свою собственную программу.

Ссылаться на

EveryDay: структура проекта Django и переключение производства с использованием веток Git

SmartKeyerror: разница между средой разработки Django и производственной средой