如何正确更改 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 应用程序中分配的密钥的主要内容,如果未能解决你的问题,请参考以下文章