Python 在django中设置设置\暂存、设置\生产和设置\本地文件的方法
我的django项目有三个系统,每个系统需要三个不同的设置文件,即本地、暂存和生产 在做了一些研究之后,我想到了一种方法,即设置一个与系统相对应的环境变量。对于本地,我将env变量设置为“localserver”,对于临时服务器,我将为生产设置“staging”,以此类推 设置.pyPython 在django中设置设置\暂存、设置\生产和设置\本地文件的方法,python,django,Python,Django,我的django项目有三个系统,每个系统需要三个不同的设置文件,即本地、暂存和生产 在做了一些研究之后,我想到了一种方法,即设置一个与系统相对应的环境变量。对于本地,我将env变量设置为“localserver”,对于临时服务器,我将为生产设置“staging”,以此类推 设置.py server_environment = os.environ.get('XYZ_ENV') if server_environment == 'staging': try: from r
server_environment = os.environ.get('XYZ_ENV')
if server_environment == 'staging':
try:
from rest_apis.settings_staging import *
except ImportError:
pass
elif server_environment == 'production':
try:
from settings_production import *
except ImportError:
pass
elif server_environment == 'localserver':
try:
from settings_local import *
except ImportError:
pass
from rest_apis.settings import *
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'xyz',
'USER': 'postgres',
'PASSWORD': 'postgres123',
'HOST': '127.0.0.1',
'PORT': 5432,
}
}
BROKER_URL = 'amqp://myuser:mypassword@127.0.0.1:5672//'
local.py
server_environment = os.environ.get('XYZ_ENV')
if server_environment == 'staging':
try:
from rest_apis.settings_staging import *
except ImportError:
pass
elif server_environment == 'production':
try:
from settings_production import *
except ImportError:
pass
elif server_environment == 'localserver':
try:
from settings_local import *
except ImportError:
pass
from rest_apis.settings import *
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'xyz',
'USER': 'postgres',
'PASSWORD': 'postgres123',
'HOST': '127.0.0.1',
'PORT': 5432,
}
}
BROKER_URL = 'amqp://myuser:mypassword@127.0.0.1:5672//'
不同系统的配置类型相同。
这里发生了什么,尽管交叉验证它是否转到了正确的if-else块,但它没有应用正确的设置。它始终连接到在Settings.py文件中指定的DB主机
另外,如果我停止我的实例(我有私有IP,所以重启IP不会改变),然后我再次启动,那么它会再次产生相同的问题
我做了stackoverflow,并尝试了各种解决方案,但都没有效果。我做错了什么?还有,对于这种情况,正确的方法是什么。
我不想通过登录(ssh)到每个系统来对系统进行硬核更改。首先,该设置文件假定所有附加设置都在
PYTHONPATH
中。如果它们与主设置文件位于同一(子)模块中,请使用如下相对导入:
server_environment = os.environ.get('XYZ_ENV')
if server_environment == 'staging':
try:
from rest_apis.settings_staging import *
except ImportError:
pass
elif server_environment == 'production':
try:
from .settings_production import *
except ImportError:
pass
elif server_environment == 'localserver':
try:
from .settings_local import *
except ImportError:
pass
第二,导入应该在设置文件的末尾(除非你想有一些无法验证的设置。在这种情况下,把它们放在导入的下面)
最后但并非最不重要的一点是,确保导入成功。删除try-except块,在文件中只保留import。您也可以删除条件,只需导入一个文件来测试它是否工作。首先,该设置文件假定您的所有附加设置都在
PYTHONPATH
中。如果它们与主设置文件位于同一(子)模块中,请使用如下相对导入:
server_environment = os.environ.get('XYZ_ENV')
if server_environment == 'staging':
try:
from rest_apis.settings_staging import *
except ImportError:
pass
elif server_environment == 'production':
try:
from .settings_production import *
except ImportError:
pass
elif server_environment == 'localserver':
try:
from .settings_local import *
except ImportError:
pass
第二,导入应该在设置文件的末尾(除非你想有一些无法验证的设置。在这种情况下,把它们放在导入的下面)
最后但并非最不重要的一点是,确保导入成功。删除try-except块,在文件中只保留import。您也可以删除条件,只需导入一个文件来测试它是否工作。首先,该设置文件假定您的所有附加设置都在
PYTHONPATH
中。如果它们与主设置文件位于同一(子)模块中,请使用如下相对导入:
server_environment = os.environ.get('XYZ_ENV')
if server_environment == 'staging':
try:
from rest_apis.settings_staging import *
except ImportError:
pass
elif server_environment == 'production':
try:
from .settings_production import *
except ImportError:
pass
elif server_environment == 'localserver':
try:
from .settings_local import *
except ImportError:
pass
第二,导入应该在设置文件的末尾(除非你想有一些无法验证的设置。在这种情况下,把它们放在导入的下面)
最后但并非最不重要的一点是,确保导入成功。删除try-except块,在文件中只保留import。您也可以删除条件,只需导入一个文件来测试它是否工作。首先,该设置文件假定您的所有附加设置都在
PYTHONPATH
中。如果它们与主设置文件位于同一(子)模块中,请使用如下相对导入:
server_environment = os.environ.get('XYZ_ENV')
if server_environment == 'staging':
try:
from rest_apis.settings_staging import *
except ImportError:
pass
elif server_environment == 'production':
try:
from .settings_production import *
except ImportError:
pass
elif server_environment == 'localserver':
try:
from .settings_local import *
except ImportError:
pass
第二,导入应该在设置文件的末尾(除非你想有一些无法验证的设置。在这种情况下,把它们放在导入的下面)
最后但并非最不重要的一点是,确保导入成功。删除try-except块,在文件中只保留import。您也可以删除条件,只需导入一个文件来测试它是否工作
我做错了什么
很难说到底是什么错了,但你可以:
。从本地设置中导入设置*
本地设置应覆盖设置.py,反之亦然ImportError
settings.py
的末尾
因此,导入的设置将覆盖现有设置local\u settings.template.py
:
"""
Local Django settings template.
Usage:
1. Copy ``local_settings.template.py`` to ``local_settings.py``.
2. Modify ``local_settings.py`` according to your needs.
Note that settings from ``local_settings.py``
will override any existing Django settings.
"""
SECRET_KEY = ''
ALLOWED_HOSTS = []
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': '',
'PORT': '',
'NAME': '',
'USER': '',
'PASSWORD': ''
}
}
"""
Core Django settings.
Consider using local settings (see ``local_settings.template.py``)
for environment specific Django settings and sensitive data.
All involved settings, however, should be listed
here with their default values and description.
For more information on this file, visit
https://docs.djangoproject.com/en/1.8/topics/settings/
For the full list of settings and their values, visit
https://docs.djangoproject.com/en/1.8/ref/settings/
"""
# Settings here.
# WARNING: local settings import should remain at the end of this file.
try:
from local_settings import *
except ImportError:
pass
本地设置.template.py
添加到VCS本地设置.py
添加到VCS忽略设置.py
:
"""
Local Django settings template.
Usage:
1. Copy ``local_settings.template.py`` to ``local_settings.py``.
2. Modify ``local_settings.py`` according to your needs.
Note that settings from ``local_settings.py``
will override any existing Django settings.
"""
SECRET_KEY = ''
ALLOWED_HOSTS = []
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': '',
'PORT': '',
'NAME': '',
'USER': '',
'PASSWORD': ''
}
}
"""
Core Django settings.
Consider using local settings (see ``local_settings.template.py``)
for environment specific Django settings and sensitive data.
All involved settings, however, should be listed
here with their default values and description.
For more information on this file, visit
https://docs.djangoproject.com/en/1.8/topics/settings/
For the full list of settings and their values, visit
https://docs.djangoproject.com/en/1.8/ref/settings/
"""
# Settings here.
# WARNING: local settings import should remain at the end of this file.
try:
from local_settings import *
except ImportError:
pass
。从本地设置中导入设置*
本地设置应覆盖设置.py,反之亦然ImportError
settings.py
的末尾
因此,导入的设置将覆盖现有设置local\u settings.template.py
:
"""
Local Django settings template.
Usage:
1. Copy ``local_settings.template.py`` to ``local_settings.py``.
2. Modify ``local_settings.py`` according to your needs.
Note that settings from ``local_settings.py``
will override any existing Django settings.
"""
SECRET_KEY = ''
ALLOWED_HOSTS = []
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': '',
'PORT': '',
'NAME': '',
'USER': '',
'PASSWORD': ''
}
}
"""
Core Django settings.
Consider using local settings (see ``local_settings.template.py``)
for environment specific Django settings and sensitive data.
All involved settings, however, should be listed
here with their default values and description.
For more information on this file, visit
https://docs.djangoproject.com/en/1.8/topics/settings/
For the full list of settings and their values, visit
https://docs.djangoproject.com/en/1.8/ref/settings/
"""
# Settings here.
# WARNING: local settings import should remain at the end of this file.
try:
from local_settings import *
except ImportError:
pass
本地设置.template.py
添加到VCS本地设置.py
添加到VCS忽略设置.py
:
"""
Local Django settings template.
Usage:
1. Copy ``local_settings.template.py`` to ``local_settings.py``.
2. Modify ``local_settings.py`` according to your needs.
Note that settings from ``local_settings.py``
will override any existing Django settings.
"""
SECRET_KEY = ''
ALLOWED_HOSTS = []
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': '',
'PORT': '',
'NAME': '',
'USER': '',
'PASSWORD': ''
}
}
"""
Core Django settings.
Consider using local settings (see ``local_settings.template.py``)
for environment specific Django settings and sensitive data.
All involved settings, however, should be listed
here with their default values and description.
For more information on this file, visit
https://docs.djangoproject.com/en/1.8/topics/settings/
For the full list of settings and their values, visit
https://docs.djangoproject.com/en/1.8/ref/settings/
"""
# Settings here.
# WARNING: local settings import should remain at the end of this file.
try:
from local_settings import *
except ImportError:
pass
。从本地设置中导入设置*
本地设置应覆盖设置.py,反之亦然