Django `SECRET_KEY` 设置

Posted

技术标签:

【中文标题】Django `SECRET_KEY` 设置【英文标题】:Django `SECRET_KEY` settings 【发布时间】:2017-04-12 21:37:12 【问题描述】:

我对 django 中的 SECRET_KEY 设置有一些“简单”的问题:

它的最小、最大和推荐长度是多少?

我可以留空吗? 如果我使用很长的SECRET_KEY,会不会“浪费”一些?

上面允许的字符是什么?

是否允许不可打印的字符(包括但不限于空格)?

我应该什么时候改变它?

我知道当我更改它时,所有现有的cookies/sessionssignature等都会失效。

是否可以从数据库(或其他来源)中检索而不是直接写在settings.py中?

【问题讨论】:

【参考方案1】:

Django 每次启动项目时都会生成一个SECRET_KEY,所以,不,you can't leave it blank。

SECRET_KEY 的长度始终为 50 个字符。

没有空格。这是 Django 用来生成它的方法。

def get_random_secret_key():
    """
    Return a 50 character random string usable as a SECRET_KEY setting value.
    """
    chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
    return get_random_string(50, chars)

是的,您可以将其存储在其他地方,例如使用env 设置方法,例如。 g.

当然,您可以随时查看documentation 关于SECRET_KEY 或代码sn-ps 之类的:

SECRET_KEY generator

startproject code

除此之外,还有 creating a ticket to improve SECRET_KEY 文档的替代方案 - 如果您认为是这样的话。

【讨论】:

我知道django 在项目创建过程中会自动生成 SECRET_KEY 但当然,我可以手动编辑它。 我找不到任何对 SECRET_KEY 始终为 50 个字符的引用。文档说它是一个字符串,没有额外内容,所以我认为它可以是任意长度。 @texnic 你检查到 Django 源代码的链接了吗?这是github.com/django/django/blob/master/django/core/management/…

以上是关于Django `SECRET_KEY` 设置的主要内容,如果未能解决你的问题,请参考以下文章

Django:配置不当:SECRET_KEY 设置不能为空

django.core.exceptions.ImproperlyConfigured:设置 SECRET_KEY 环境变量

SECRET_KEY 设置不能为空 - django+pycharm

将环境变量中的 Django SECRET_KEY 传递给 Dockerized gunicorn

在 miniconda 环境中隐藏 django secret_key 时出错

Django SECRET KEY 错误