TLDR: Comment créer une Django Secret Key

Publié le

Levez la main ceux qui n’ont jamais ajouté une SECRET_KEY Django dans un commit au debut d’un projet e après, avoir besoin de créer une nouvelle clé avant de l’envoyer à la prod?

Ce TLDR est un rappel rapide de comment créer une clé secrète, sans utiliser un site web pour le faire.

Django toujours crée une clé quand on commence un nouveau projet, donc cette fonction est déjà là et on va l’utiliser de cette façon:

from django.core.management.utils import get_random_secret_key

print(get_random_secret_key())

Si on ne veut pas ouvrir une session Python, il est possible de l’exécuter directement avec la ligne de commande:

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

N’oubliez pas qu’il faut avoir installé Django dans votre environnement après exécuter l’opération.

Actualisation Python 3.6+

Grâce à interaction de @ChristianHeimes et @pauloxnet dans un post de @aclark4life sur twitter. J’ai appris qu’à partir de la version Python 3.6 la bibliothèque secrets a été ajoutée pour qu’on puisse l’utiliser dans la création et manutention des chiffres aléatoires comme des clés secrètes.

C’est une bonne solution qui utilise le concept de piles fournies de Python et on peut l’utiliser pour créer la SECRET_KEY sans avoir Django installé:

import secrets

print(secrets.token_urlsafe())

Vous pouvez aussi utiliser la ligne de commande:

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

Et, si vous vous êtes déjà demandé comment Django fait ça désormais? Bon, ils l’utilisent aussi. 🎉

En commençant par la version 3.1.3 la fonction get_random_secret_key marche comme ça:

import secrets

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

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

print(secret_key)
Licence Creative Commons

Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International .