Python 如何在本地和生产中使用不同的settings.py
在本地和生产环境中运行项目时,我希望使用不同的settings.py,因为settings.py中有一个强制项目使用https的设置,但是django runserver.py只能使用http,不能使用https,因此我现在无法在本地运行项目。另外,我希望在我的计算机上设置debug=True,在生产环境中设置debug=False。那么,如何为我的计算机和生产使用不同的settings.py呢?有一些选项,其中一个用于创建两个设置文件: 将以下添加到设置.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 #
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,我编辑了我的答案。非常感谢!工作起来很有魅力!