我的Django项目的密钥包含特殊字符,例如#
,@
,^
,*
等。我正在尝试将此设置为env变量at /etc/environment
。
我在文件中包含以下内容:
export SECRET_KEY='zotpbek!*t_abkrfdpo!*^@#plg6qt-x6(%dg)9p(qoj_r45y8'
即。我在字符串周围包含单引号,因为它包含特殊字符(也由this SO帖子规定)。我退出文件并执行source /etc/environment
。接下来,我在终端中输入env
:SECRET__KEY
正确显示。
我退出并重新登录。我再次输入env
。
此时SECRET_KEY
仍会显示,但会超出@
个字符。它排除了#
字符以外的所有内容(包括)。
如何解决此问题?尝试使用双引号也没有减轻任何问题。我的操作系统是Ubuntu 14.04 LTS。
P.S。我知道环境变量不支持访问控制;有一些理由不将Django密钥设置为env var。出于这个问题的目的,让我们把它放在后面。
答案 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)]))'
这将生成没有不安全字符的密钥