Django:如何管理开发和生产环境的设置?

17 浏览
0 Comments

Django:如何管理开发和生产环境的设置?

我一直在开发一个基本的应用程序。现在在部署阶段,我明确需要本地设置和生产设置。\n以下内容将会很有帮助:\n

    \n

  • 如何处理开发和生产设置。
  • \n

  • 如何在开发环境中仅保留诸如django-debug-toolbar之类的应用程序。
  • \n

  • 有关开发和部署设置的其他提示和最佳实践。
  • \n

0
0 Comments

Django中如何管理开发和生产环境的设置?

在Django项目中,我们经常需要在开发环境和生产环境中使用不同的设置。下面是一种管理开发和生产设置的方法,通过创建多个设置文件来实现。

步骤如下:

1. 在项目目录中创建一个名为"settings"的文件夹。

2. 在"settings"文件夹中创建四个Python文件,分别命名为"__init__.py"、"base.py"、"dev.py"和"prod.py"。其中"__init__.py"文件用于根据环境变量加载对应的设置文件。

3. 在"__init__.py"文件中添加以下内容:

from .base import *
if os.environ.get('myproject') == 'prod':
   from .prod import *
else:
   from .dev import *

4. 在"base.py"文件中添加通用的设置,这些设置将在开发环境和生产环境中都被使用。

import os
...
INSTALLED_APPS = [...]
MIDDLEWARE = [...]
TEMPLATES = [{...}]
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, '/path/')
MEDIA_URL = '/path/'

5. 在"dev.py"文件中添加开发环境特定的设置。

DEBUG = True
ALLOWED_HOSTS = ['localhost']
...

6. 在"prod.py"文件中添加生产环境特定的设置。

DEBUG = False
ALLOWED_HOSTS = ['www.example.com']
LOGGING = [...]
...

通过以上步骤,我们可以根据环境变量加载对应的设置文件,从而实现在开发环境和生产环境中使用不同的设置。

补充说明:

- 在"base.py"文件中,我们可以添加通用的设置,这些设置将在开发环境和生产环境中都使用。

- 在"dev.py"文件中,我们可以添加开发环境特定的设置。

- 在"prod.py"文件中,我们可以添加生产环境特定的设置。

- 在"__init__.py"文件中,我们使用os.environ.get('myproject')来获取环境变量,并根据其值加载对应的设置文件。

- 在开发环境中,我们可以将myproject变量设置为'dev',在生产环境中设置为'prod'。

- 通过这种方式,我们可以灵活地管理开发和生产环境中的设置,使得项目的配置更加清晰和可维护。

以上就是在Django中管理开发和生产环境设置的方法。希望对你有所帮助!

0
0 Comments

Django:如何管理开发和生产环境的设置?

默认情况下使用生产环境的设置,但是在与settings.py文件相同的文件夹中创建一个名为settings_dev.py的文件。在该文件中添加覆盖设置,例如DEBUG=True

在用于开发的计算机上,将以下内容添加到~/.bashrc文件中:

export DJANGO_DEVELOPMENT=true

或通过在命令前加上前缀来一次性启用它:

DJANGO_DEVELOPMENT=true python manage.py runserver

settings.py文件的底部添加以下内容。

# 如果DJANGO_DEVELOPMENT环境变量为true,则覆盖生产变量
if os.getenv('DJANGO_DEVELOPMENT') == 'true':
    from settings_dev import *  # 或者具体的覆盖设置

(请注意,应避免在Python中使用*导入)

默认情况下,生产服务器不会覆盖任何内容。完成!

与其他答案相比,这个答案更简单,因为它不需要更新PYTHONPATH或设置DJANGO_SETTINGS_MODULE,这只允许您一次只能处理一个django项目。

为什么不是正确的答案?现在SO真的一团糟。谢谢cs01

if os.environ.get('DJANGO_DEVELOPMENT', 'true')也是有效的。我之所以提到这一点,只是因为上述的is not true方法在Python 3.6上无法导入。

这是一个坏主意:它总是使用您的DEV设置,这将在公共服务器上泄漏私人数据。您只需要检查DJANGO_DEVELOPMENT环境变量是否存在(即is not None)。

感谢信息,我意识到当我在服务器上加载了错误的设置时,我做错了什么,但我不确定为什么settings_dev.py会加载。

我会更进一步确保它存在并且为真值,只需省略is not None检查即可。另外,os.getenv是简写方式。

这样做是否更好?在生产服务器上设置环境变量为"DJANGO_PRODUCTION"或其他内容。这将对任何新实例默认为开发环境,直到您设置该变量为止。

在我看来不是这样。如果开发是默认值,并且在没有设置生产环境变量的情况下意外部署,则会泄漏可以被黑客利用的敏感信息。如果默认为生产环境,最坏的情况是您必须使用DJANGO_DEVELOPMENT环境变量重新启动服务器。

我会将settings.py作为默认设置,并在DJANGO_PROD环境为true时使用settings_prod.py。并将settings_prod.py放在git ignore中。

0
0 Comments

在Django开发中,常常需要管理开发环境和生产环境的配置。为了解决这个问题,我们可以使用环境变量DJANGO_SETTINGS_MODULE来控制Django加载哪个配置文件。具体步骤如下:

1. 创建不同环境的配置文件,例如myapp/production_settings.pymyapp/test_settings.py

2. 设置DJANGO_SETTINGS_MODULE环境变量,将其值设置为对应的配置文件路径,例如DJANGO_SETTINGS_MODULE=myapp.production_settingsDJANGO_SETTINGS_MODULE=myapp.test_settings

解决方法:

1. 可以使用脚本或者shell来设置DJANGO_SETTINGS_MODULE环境变量。可以在启动Django之前运行export DJANGO_SETTINGS_MODULE=myapp.production_settings来设置环境变量。

2. 可以使用进程管理器来设置DJANGO_SETTINGS_MODULE环境变量。例如,使用Supervisor可以使用environment配置键来传递环境变量,而使用Honcho可以在.env文件中定义环境变量。

3. 可以利用PYTHONPATH变量来存储配置文件,从而实现将配置和应用文件分离。可以将配置文件存储在完全不同的位置,例如在生产服务器上存储在/etc/目录下。

以上是解决开发和生产环境配置问题的方法,通过设置DJANGO_SETTINGS_MODULE环境变量来控制Django加载不同的配置文件。这样可以方便地管理不同环境的配置,并实现配置和应用文件的分离。

0