如何健壮地将Django密钥设置为环境变量

时间:2017-09-21 13:18:51

标签: django environment-variables django-settings

我的Django项目的密钥包含特殊字符,例如#@^*等。我正在尝试将此设置为env变量at /etc/environment

我在文件中包含以下内容:

export SECRET_KEY='zotpbek!*t_abkrfdpo!*^@#plg6qt-x6(%dg)9p(qoj_r45y8'

即。我在字符串周围包含单引号,因为它包含特殊字符(也由this SO帖子规定)。我退出文件并执行source /etc/environment。接下来,我在终端中输入envSECRET__KEY正确显示。

我退出并重新登录。我再次输入env

此时SECRET_KEY仍会显示,但会超出@个字符。它排除了#字符以外的所有内容(包括)。

如何解决此问题?尝试使用双引号也没有减轻任何问题。我的操作系统是Ubuntu 14.04 LTS。

P.S。我知道环境变量不支持访问控制;有一些理由不将Django密钥设置为env var。出于这个问题的目的,让我们把它放在后面。

3 个答案:

答案 0 :(得分:0)

这本身并不是Django问题。根据此问题Escape hash mark (#) in /etc/environment,您无法使用"#"在/etc/environment

我建议你继续重新生成你的密钥,直到你得到一个没有#s - 这应该解决问题。 Django Extensions有一个命令generate_secret_key。更改密钥的副作用​​是当前会话将变为无效,即除非您在应用程序中的其他位置使用它。

答案 1 :(得分:0)

根据base.BackColor = Color.Blue;文档,您可以在.env文件中使用不安全的字符。

https://django-environ.readthedocs.io/en/latest/index.html#tips

要使用不安全的字符,必须先将django-environ编码为.env文件。

urllib.parse.encode

答案 2 :(得分:0)

最简单的方法是在Linux终端中使用以下内联脚本使用python3生成一个:

python3 -c 'import random; print("".join([random.choice("abcdefghijklmnopqrstuvwxyz0123456789!@%^&*-_") for i in range(50)]))'

这将生成没有不安全字符的密钥