如何正确更改 Django Web 应用程序中分配的密钥

Posted

技术标签:

【中文标题】如何正确更改 Django Web 应用程序中分配的密钥【英文标题】:How can i properly change the assigned secret key in a Django Web Application 【发布时间】:2017-08-01 06:57:55 【问题描述】:

所以,我正在尝试将 Django Web App 部署到生产环境,但我想在此之前更改密钥。

我尝试使用随机函数生成一个新密钥,并插入该新密钥来代替旧密钥。当我这样做时,我收到一条错误消息,内容如下:

AttributeError 'module' 对象没有属性 'JSONEncoder' ... 异常位置 .../django/contrib/messages/storage/cookie.py 在 ,第 9 行

我已删除浏览器缓存并重新启动服务器,但错误仍然存​​在。 我也试过改回key,删除浏览器缓存重启后,错误依旧存在。

知道如何解决这个问题吗?

编辑:Python 版本是 2.6.6,Django 版本是 1.3.1

【问题讨论】:

如果你运行./manage.py check,你会得到什么?同样的错误? 嗯,你使用的是什么版本的 python 和 django?看着github.com/django/django/blob/master/django/contrib/messages/… 看起来你的json 包坏了... 我没有运行 ./manage.py 检查的权限。此外,就包裹而言,一个多月以来没有任何变化。我唯一做的就是更改密钥,应用程序在 UI 上抛出错误,然后我将密钥改回来,错误仍然存​​在。 【参考方案1】:

所以,回答我自己的问题,更改分配的键与更改任何其他变量的方式相同。只需创建一个 50 个字符(理想情况下是随机的)字符串并将 SECRET_KEY 设置为等于它。

SECRET_KEY = "#$%&N(ASFGAD^*(%326n26835625BEWSRTSER&^@T#%$Bwertb"

然后重新启动 Web 应用程序。

我的问题完全不相关。发生这种情况是因为我将 python 用来定位包的路径设置到了一个奇怪的位置。对不起那些家伙。

【讨论】:

【参考方案2】:

我喜欢使用这种模式(您可以在其中放置应用的名称而不是 APP_NAME):

# SECURITY WARNING: keep the secret key used in production secret!
secret_key_env_variable_name = 'APP_NAME_SECRET_KEY'
SECRET_KEY = os.environ.get(secret_key_env_variable_name)
if len(SECRET_KEY) < 25:
    print( 'The value of $%s does not contain enough characters (%s characters)' % (secret_key_env_variable_name, len(SECRET_KEY)))
    raise RuntimeError('SECRET_KEY is not long enough (in environment variable "%s"' % secret_key_env_variable_name)

然后在运行 Django 的帐户中,我将这个变量导出到 .bashrc 中(使用您适用的环境配置文件):

export APP_NAME_SECRET_KEY='oysmy1iv=n7ygq%og!b4@(k@40&5d-i&5%^c8$riw%3$r3yi(='

注意:该密钥是在网络搜索后使用生成器的第一个 url 随机生成的:generate a secret_key django。

【讨论】:

很好的答案,比上面更完整。如果我是 OP,我会将其评为答案

以上是关于如何正确更改 Django Web 应用程序中分配的密钥的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django 在模型对象中分配项目?

Django:在模板中分配变量

如何使用java代码在sp值中分配文本大小

.NET 如何测量请求中分配的字节数?

.STACK 没有在 MASM 中分配正确的大小

在数据集 Excel 中分配的最后一行不正确