TLDR: Gerando Secret Key para o Django

Publicado em

Levante a mão quem nunca versionou a SECRET_KEY do Django no início de um projeto e precisou gerar uma nova na hora de subir pra produção.

Este TLDR é um lembrete rápido de como você pode regerar uma secret key localmente, sem recorrer a sites na internet para gera-la para você.

Como o Django gera a secret key no início de um projeto, já existe esta função implementada em seu código e você pode acessá-la desta forma:

from django.core.management.utils import get_random_secret_key

print(get_random_secret_key())

Se não quiser nem ter o trabalho de abrir o shell do Python você pode executar direto do terminal:

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

Não se esqueça que é preciso ter o Django instalado no ambiente em que você for rodar o comando.

Atualização para Python 3.6+

Graças a interação de @ChristianHeimes e @pauloxnet na postagem do @aclark4life no twitter. Eu aprendi que a partir da versão 3.6 to Python a biblioteca secrets foi adicionada para ajudar com a geração de números aleatórios criptograficamente fortes para serem usados para gerenciamento de dados como senhas, autenticação de contas tokens de segurança entre outros.

É uma solução legal e com baterias inclusas pra gerar sua SECRET_KEY sem ter o Django como dependência:

import secrets

print(secrets.token_urlsafe())

Você também pode usar pelo terminal:

python -c "import secrets; print(secrets.token_urlsafe())"

E caso tenha ficado curioso sobre como o Django faz isso hoje em dia, adivinha? Eles também usam esta solução. 🎉

Começando da versão de tag 3.1.3 isso é o que a função get_random_secret_key faz por trás dos panos:

import secrets

length = 50
chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'

secret_key = ''.join(secrets.choice(chars) for i in range(length))

print(secret_key)
Licença Creative Commons

Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional .