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

Python 如何在本地和生产中使用不同的settings.py,python,django,heroku,Python,Django,Heroku,在本地和生产环境中运行项目时,我希望使用不同的settings.py,因为settings.py中有一个强制项目使用https的设置,但是django runserver.py只能使用http,不能使用https,因此我现在无法在本地运行项目。另外,我希望在我的计算机上设置debug=True,在生产环境中设置debug=False。那么,如何为我的计算机和生产使用不同的settings.py呢?有一些选项,其中一个用于创建两个设置文件: 将以下添加到设置.py的末尾: import os #

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

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

将以下添加到设置.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())
创建本地设置.py并覆盖所需设置:

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

DEBUG = True
SECURE_PROXY_SSL_HEADER = None
SECURE_SSL_REDIRECT = False


...

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

基本设置可以导入到dev、staging、production和test设置中,然后,您可以设置现有变量的值(例如DEBUG)或定义新变量

树结构可以是:

  • {您的项目名称}/
    • 背景/
      • base.py
      • 戴夫·皮
      • staging.py
      • production.py
      • test.py
然后您可以使用它们,例如:

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

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

我建议使用Git进行此操作,创建两个分支开发和生产,将您的设置保留在这些单独的分支中。因此local_settings.py只是这三行,或者我的整个settings.py,除了这三行是different@KovyJacob,local_settings.py是settings.py的一部分。仅在local_settings.py中设置要覆盖的内容。我在我的settings.py中有一段代码,它强制我的项目使用https:“SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO','https')SECURE_SSL_REDIRECT=True”。如何在local_settings.py中扭转这种情况?@KovyJacob,我编辑了我的答案。非常感谢!工作起来很有魅力!