如何在本地和生产中使用不同的 settings.py

时间:2021-04-06 16:12:51

标签: python django heroku

当我在本地和生产中运行我的项目时,我想有不同的 settings.py,因为我在 settings.py 中有一个设置强制我的项目使用 https,但 django runserver.py 只能使用 http,不能https,所以我现在无法在本地运行我的项目。另外,我希望在我的计算机上设置 debug=True,并在生产环境中设置 debug=False。那么如何为我的计算机和生产使用不同的 settings.py 呢?

2 个答案:

答案 0 :(得分:1)

有一些选项,其中一个用于创建两个设置文件:

将以下添加到settings.py的末尾

import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
BASE_DIR = os.path.dirname(PROJECT_APP_PATH)

DEBUG = False
...

...

##################
# LOCAL SETTINGS #
##################

# Allow any settings to be defined in local_settings.py which should be
# ignored in your version control system allowing for settings to be
# defined per machine.

f = os.path.join(PROJECT_APP_PATH, "local_settings.py")
if os.path.exists(f):
    import sys
    import imp
    module_name = "%s.local_settings" % PROJECT_APP
    module = imp.new_module(module_name)
    module.__file__ = f
    sys.modules[module_name] = module
    exec(open(f, "rb").read())

创建 local_settings.py 并覆盖所需的设置:

#####################
# OVERWRITE SETTINGS #
#####################

DEBUG = True
SECURE_PROXY_SSL_HEADER = None
SECURE_SSL_REDIRECT = False


...

答案 1 :(得分:0)

您可以有一个名为 settings 的文件夹,其中包含用于基本设置、开发设置、暂存设置、生产设置和测试设置的不同 python 文件。

可以将基本设置导入到开发、暂存、生产和测试设置中,然后您可以设置现有变量的值(例如 DEBUG)或定义新变量。

树结构可以是:

  • {您的项目名称}/
    • 设置/
      • base.py
      • dev.py
      • staging.py
      • production.py
      • test.py

然后你可以使用它们,例如:

    $ python manage.py runserver --settings={your-project-name}.settings.dev

对于部署,您可以通过 env 变量传递正确的设置(例如在 docker 图像的情况下)