【问题标题】:How to robustly set Django secret key as environment variable如何稳健地将 Django 密钥设置为环境变量
【发布时间】:2017-09-21 13:18:51
【问题描述】:

我的 Django 项目的密钥包含特殊字符,例如 #@^* 等。我正在尝试将其设置为 /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。


附言我知道环境变量不支持访问控制;有很多理由不将 Django 密钥设置为 env var。出于这个问题的目的,让我们把它放在次要位置。

【问题讨论】:

    标签: django environment-variables django-settings


    【解决方案1】:

    这本身不是 Django 问题。根据这个问题Escape hash mark (#) in /etc/environment,您不能/etc/environment 中使用“#”。

    我建议您继续重新生成您的密钥,直到您得到一个没有#s 的密钥——这应该可以解决问题。 Django Extensions 对此有一个命令 generate_secret_key。更改密钥的副作用​​是当前会话将变得无效,也就是说,除非您在应用程序的其他地方使用它。

    【讨论】:

    • 那为什么初始设置后秘钥显示正确?
    【解决方案2】:

    根据django-environ 文档,您可以在 .env 文件中使用不安全字符。

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

    要使用不安全字符,您必须在设置为 .env 文件之前使用 urllib.parse.encode 进行编码。

    Example:- admin#123 = admin%28123

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-11
        • 1970-01-01
        • 1970-01-01
        • 2016-10-19
        • 2021-11-02
        • 1970-01-01
        • 2020-02-14
        • 2019-12-24
        相关资源
        最近更新 更多