我正在努力解决如何在我的django settings.py

时间:2016-05-24 20:17:31

标签: python django heroku development-environment local-variables

我真的很难在我的django settings.py中隐藏我的敏感材料。我尝试为本地和生产创建一个单独的设置文件here 人建议然后中途停止。我还尝试在我的核心文件中创建一个名为secrets.py的文件,其中我的wsgi和设置等等,并试图这样做

DEBUG = True

if DEBUG:
    from .secrets import SECRET_KEY_LO
    this = SECRET_KEY_LO
    SECRET_KEY = this
else:
    SECRET_KEY = os.environ['SECRET_KEY']

但那并没有奏效。什么是专业编程方式呢?因此,我不必手动将DEBUG true更改为DEBUG false,因为它感觉非常新手并且可能非常烦人

3 个答案:

答案 0 :(得分:1)

看看django-configurations。它内置支持输入非秘密的默认值,然后在Prod中使它们变得必需和不同。这些值是通过环境变量提供的,因此它会将问题向下移动一点。

一旦你在那里获得了良好的价值进行测试,你就会遇到如何保密秘密值的部署问题。每个PAAS似乎都有自己的版本,就像许多配置管理(Chef,Puppet,Salt,Ansible等)系统一样。我发现的最好的一个是在AWS部署中使用credstash。您在服务器上的启动脚本只需要调用credstash get,然后将这些值作为ENV变量传递给gunicorn / uwsgi / whatever,然后django-configurations选择它们并应用它们。这显然取决于AWS,因此它取决于您部署的位置,但基本思想仍然相同。获取秘密值并通过ENV将其提供给您的服务。

+1在检查秘密值之前考虑整个问题。通常,在github上为这些事情做一些google dorking非常容易。

答案 1 :(得分:0)

您可以使用config.json文件来保留所有秘密。您可以将此文件添加到.gitignore,以便它不会上传到云中的存储库(例如GitHub)。 然后,您可以使settings.py文件读取config.json文件,并开始将值分配给所需的Python变量。

答案 2 :(得分:0)

Two scoops of django,关于Django最佳实践的最有价值的文本之一以下列方式解释了这个问题:您应创建一个settings目录,在该目录中保留{{1}的设置文件层次结构彼此。然后,您将使用import开关启动django,并在--settings中配置设置文件。

然后,您构建一个文件(例如wsgi.py),其中仅包含密钥(API密钥等),并local_secret.py剩余文件中的其余设置。您将import保留在代码存储库之外(例如,使用local_secrets.py)。

This question has an answer by omouse and gene_wood更为详细。这个问题是关于本地和生产环境而不是秘密密钥,请牢记这一点。