Django : comment changer le mot de passe d’un utilisateur en ligne de commande

django password reset

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.

Auteur : Mathias

Qui suis-je ? Je travaille dans les télécoms et réseaux depuis 1996 (oui, le siècle dernier). Je suis ingénieur en génie électrique et informatique industrielle réseaux et télécoms. Je suis passionné de technologies et je participe à plusieurs projets touchant les télécoms (asterisk et freeswitch notament) et la sécurité informatique (PfSense). J’interviens en tant que freelance afin d'accompagner les entreprises et opérateurs en leur apportant mon expérience et mon expertise.

2 réflexions sur « Django : comment changer le mot de passe d’un utilisateur en ligne de commande »

  1. 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.

Laisser un commentaire