Django部署变量

Django部署变量,django,Django,我有一个本地运行的开发应用程序。我的服务器上运行了一个生产应用程序。我想继续在本地发展,推动我的变革。但是,开发版本使用本地Postgre,静态文件和媒体文件驻留在项目内部。服务器版本静态文件和媒体文件位于apache提供服务的静态公共html目录中。我可以在本地主机和服务器上拥有本地静态和媒体文件以及不同的postgres凭据吗?如何实现这一点?该软件包是专为您遇到的问题而设计的。它不使用JSON文件,而是使用.env文件,该文件遵循 例如 设置.py 从dotenv导入加载\u dotenv

我有一个本地运行的开发应用程序。我的服务器上运行了一个生产应用程序。我想继续在本地发展,推动我的变革。但是,开发版本使用本地Postgre,静态文件和媒体文件驻留在项目内部。服务器版本静态文件和媒体文件位于apache提供服务的静态公共html目录中。我可以在本地主机和服务器上拥有本地静态和媒体文件以及不同的postgres凭据吗?如何实现这一点?

该软件包是专为您遇到的问题而设计的。它不使用JSON文件,而是使用
.env
文件,该文件遵循

例如

设置.py

从dotenv导入加载\u dotenv
加载_dotenv()
DEBUG=os.getenv('DEBUG',1)#带有默认值
SECRET\u KEY=os.getenv('DJANGO\u SECRET\u KEY'))
DB\u USERNAME=os.getenv('DB\u USERNAME')
DB\u PASSWORD=os.getenv('DB\u PASSWORD')
LOGGING\u FOLDER=os.getenv('LOGGING\u FOLDER'))
#可以存储允许的主机并将其拆分为一个列表
#另外,单独设置文件中的名称不必与settings.py变量名称匹配
允许的_HOSTS=os.getenv('HOSTS','').split('')
#这将是['locahost','localhost:8000']
# ...
.env

DJANGO_SECRET_KEY=somethingotherthanthis
DB_USERNAME=postgres
DB_PASSWORD=123456
LOGGING_FOLDER=/var/logging/app/
HOSTS=localhost localhost:8000

当然,您不必使用外部包,您可以始终使用JSON文件,并且只在设置中更改以下代码。在这两种情况下,您需要注意的是,您保存的敏感数据和环境特定信息(如介质文件夹、日志文件夹等)的文件未签入版本控制系统

设置.py

导入json
打开('settings.json')作为fh:
文件设置=json.load(fh)
DEBUG=file\u settings.get('DEBUG',1)
# ...

您目前是如何提供凭据的,它们是否已硬编码到
settings.py
文件中?不,我正在从项目之外的json文件中读取,我可能没有遵循这一点,请原谅。我假设您正在本地开发并将更改推送到服务器。是否可以更新json文件中的凭据(和其他相关信息)。这样,您在一个版本的JSON设置文件中拥有本地开发凭据,在另一个版本的JSON设置文件中拥有生产凭据?我想这对凭据很有用。目录呢?我是否也应该在json中为这些变量创建变量?我不确定我是否可以将文件夹放在项目中,然后在prod上使用符号链接。是的,我就是这么做的。唯一的区别是我使用.env文件来描述您所描述的内容。这与12因素应用程序原则密切相关。我会写一个更详细的答案,但你问的问题是对的。你介意分享一下你是如何为部署创建符号链接的吗?我想保留MEDIA_ROOT='/static',但在我的服务器上,我从apache静态站点提供媒体服务。MEDIA_ROOT='/var/www/html/MEDIA.bradrice.com/public_html/'。如果我尝试ln-s/var/www/html/media.bradrice.com/public_html media,它似乎没有以正确的方式创建链接。这是一个好问题,我没有lol的答案。我建议创建一个单独的问题