Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django中设置设置\暂存、设置\生产和设置\本地文件的方法_Python_Django - Fatal编程技术网

Python 在django中设置设置\暂存、设置\生产和设置\本地文件的方法

Python 在django中设置设置\暂存、设置\生产和设置\本地文件的方法,python,django,Python,Django,我的django项目有三个系统,每个系统需要三个不同的设置文件,即本地、暂存和生产 在做了一些研究之后,我想到了一种方法,即设置一个与系统相对应的环境变量。对于本地,我将env变量设置为“localserver”,对于临时服务器,我将为生产设置“staging”,以此类推 设置.py server_environment = os.environ.get('XYZ_ENV') if server_environment == 'staging': try: from r

我的django项目有三个系统,每个系统需要三个不同的设置文件,即本地、暂存和生产

在做了一些研究之后,我想到了一种方法,即设置一个与系统相对应的环境变量。对于本地,我将env变量设置为“localserver”,对于临时服务器,我将为生产设置“staging”,以此类推

设置.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//'
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。您也可以删除条件,只需导入一个文件来测试它是否工作

我做错了什么

很难说到底是什么错了,但你可以:

  • 从rest\u API中删除
    。从本地设置中导入设置*

    本地设置应覆盖设置.py,反之亦然

  • 确保您的导入是正确的

    删除try/except并检查是否引发了
    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
    
  • 我做错了什么

    很难说到底是什么错了,但你可以:

  • 从rest\u API中删除
    。从本地设置中导入设置*

    本地设置应覆盖设置.py,反之亦然

  • 确保您的导入是正确的

    删除try/except并检查是否引发了
    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
    
  • 我做错了什么

    很难说到底是什么错了,但你可以:

  • 从rest\u API中删除
    。从本地设置中导入设置*

    本地设置应覆盖设置.py,反之亦然