Comment changer le mot de passe d’un utilisateur dans un framework Django en ligne de commande ?
En fait c’est assez simple. Il faut ouvrir un shell python, importer le modèle User, récupérer l’objet correspondant à votre utilisateur, modifier l’attribut « password » et sauver l’objet.
Ne pas oublier d’activer l’environnement virtuel si nécessaire.
Voici le code correspondant à la description (n’oubliez pas de changer l’attribut « username » afin qu’il corresponde à votre utilisateur et le « password » bien sûr)
# Lancement du shell python manage.py shell # Le prompt change !!! >>> # Chargement du modèle User from django.contrib.auth.models import User # Récupération de l'objet correspondant à notre utilisateur root u = User.objects.get(username='root') # Changement du mot de passe u.set_password('mon_mot_de_passe_res_complique') # Sauvegarde u.save() # On quitte le shell exit()
Manipuler les objets Django en CLI via le shell n’est pas bien compliqué, mais terriblement utile et puissant.
Tu peux aussi utiliser la commande changepassword:
python manage.py changepassword admin
Je propose une version qui produit un mot de passe ± aléatoire et l'envoi par courriel :
>>> from django.contrib.auth.models import User
>>> from django.core.mail import send_mail
>>> import random
# Remplacer ****** par l'utilisateur pour qui il faut changer le mot de passe
>>> u = User.objects.get(username='******')
>>> courriel = u.email
>>> nouveaumotdepasse= ''
>>> for i in range(10): # longueur du mot de passe
>>> nouveaumotdepasse += random.choice(u"abcdefghijklmnopqrstuvwxyz0123456789éàèù@µ_-")
>>> u.set_password(nouveaumotdepasse)
>>> u.save()
>>> send_mail(u'Changement du mot de passe', u'Votre mot de passe a été changé, c'est désormais '+ nouveaumotdepasse + u' À bientôt !', 'from@site.fr', [courriel], fail_silently=False)
C'est d'ailleurs que Django ne permette pas en natif de faire ce genre de manipulation via la zone d'administration automatique.