在环境Python / Django中存储配置

时间:2017-07-22 03:56:25

标签: python django heroku configuration

我一直在想这个问题。也就是说,在Python和/或Django中执行项目时,如何将配置与代码库隔离开来。

特别是,这些想法受到了Heroku的12个因素之一的启发:III Config

有什么方法可以做到这一点?在用Python编写项目时,他怎么能遵守这个要求,特别是Django?

1 个答案:

答案 0 :(得分:4)

使用环境变量

解决此问题的最常用方法是使用环境变量。

例如,在Django应用程序的settings.py中,您可以编写以下内容:

import os
if os.getenv("DJANGO_DEBUG") == '1':
    DEBUG = True

API密钥也非常相似:

import os
API_KEY = os.getenv("API_KEY", None)

django-environ package建议使用FlipperPA执行此操作的另一种方法。它受到12factor的启发,所以它似乎是这个问题的完美匹配。

如果使用Heroku进行部署,则可以在设置下为每个dyno编写自己的环境变量。如果您使用其他部署方法(如​​AWS CodeDeploy),则可以编写shell脚本以通过从安全存储(例如AWS Paramater Store)检索环境变量来设置环境变量

设置环境变量

设置这些环境变量取决于您的操作系统。环境变量也是从命令行继承的,因此对于Linux,您必须将环境变量添加到运行脚本中,而在Windows上则可以添加系统变量。

Windows系统环境变量(通用访问环境变量):

setx API_KEY abcdefghijklmnopqrstuvwxyz123

Windows临时环境变量(运行此命令后调用的所有进程都可以访问该变量):

set API_KEY abcdefghijklmnopqrstuvwxyz123

为Linux中的所有进程添加环境变量更复杂,请按照this的答案在shell启动时自动设置环境变量。

Linux临时环境变量(运行此命令后调用的所有进程都可以访问该变量):

export API_KEY="abcdefghijklmnopqrstuvwxyz123"

测试环境变量

要测试环境变量集,可以使用以下命令(将“API_KEY”替换为变量的名称):

视窗:

echo %API_KEY%

Linux的:

echo $API_KEY

如果这些东西返回您输入的相同内容,它应该正常工作。您可以在python中尝试输入:

python

然后您应该看到以下内容:

Python 3.6.2 (default, Jul 17 2017, 16:44:45)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

然后你可以编写你的python来测试它:

import os
os.getenv("API_KEY")

您应该看到环境变量的值打印出来。