Django 密钥生成

lak*_*ill 7 django django-rest-framework

我正在为 Django 后端制作一个样板,我需要能够将其设置为下一个下载它的人显然无法访问我的秘密密钥,或者拥有不同的密钥。我一直在研究一些选择,并在这个过程中进行实验。我已经尝试过以下方法:

from django.core.management.utils import get_random_secret_key 
SECRET_KEY = get_random_secret_key()
Run Code Online (Sandbox Code Playgroud)

这似乎正在发挥作用。我假设每次运行 python manage.py runserver 时它都会生成一个新密钥。这对于生产环境来说会是一个问题吗?这确实是为了 Heroku 部署,有没有更好的方法我应该使用公共存储库来做到这一点?我想我现在所做的事情会破坏一些东西。

bl3*_*0de 9

如何生成 Django SECRET_KEY

方法一:

$ python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

Run Code Online (Sandbox Code Playgroud)

7^t+3on^bca+t7@)w%2pedaf0m&$_gnne#^s4zk3a%4uu5ly86

方法二:

import string
import secrets

c = string.ascii_letters + string.digits + string.punctuation

secret_key = ''.join(secrets.choice(c) for i in range(67))

print(secret_key) 

Run Code Online (Sandbox Code Playgroud)

df&)ok{ZL^6Up$\y2*">LqHx:D,_f_of#P,~}n&\zs*:y{OTU4CueQNrMz1UH*mhocD

方法三

djecrety.ir


Ale*_*nov 5

您的猜测是正确的,密钥不应在每次运行时更改。其他人应该手动创建自己的,然后提交到他们的存储库。另一种方法是从环境变量加载它并让他们将密钥放在那里。

关于第二个问题 - 您需要这样做的唯一原因是泄露密钥。根据文档:

密钥用于:

如果您使用 django.contrib.sessions.backends.cache 以外的任何其他会话后端,或者使用默认的 get_session_auth_hash(),则所有会话。

如果您使用 CookieStorage 或 FallbackStorage,则所有消息。

所有PasswordResetView 令牌。

任何加密签名的使用,除非提供不同的密钥。

因此,更改它可能会注销所有用户并使密码/重置链接无效。这不是你经常想做的事情,但也不是一场彻底的灾难。