Comment réinitialiser le mot de passe administrateur Django?

449

J'utilise Django (version 1.3) et j'ai oublié le nom d'utilisateur et le mot de passe administrateur. Comment réinitialiser les deux?

Et est-il possible de transformer un utilisateur normal en administrateur, puis de supprimer le statut d'administrateur?

IamH1kc
la source

Réponses:

783
python manage.py changepassword <user_name>

voir les documents

JamesO
la source
7
vient de réaliser que vous avez dit que vous avez oublié le nom d'utilisateur ... 'admin' étant le nom d'utilisateur dans ma réponse ne sera pas d'une grande aide alors!
JamesO
8
@ user794916 C'est un choix plutôt étrange si vous ne vous souvenez pas du nom d'utilisateur. :-)
DrTyrsa
1
Vous pouvez changer le nom d'utilisateur de "admin" en un autre nom d'utilisateur approprié. : D
mxi1
4
Django est le meilleur. tout est si simple
DMTintner
5
Si vous avez oublié le nom d'utilisateur, vous pouvez faire manage.py createsuperuserpour créer un deuxième superutilisateur, puis afficher la liste des utilisateurs pour trouver l'original. Connectez-vous ensuite en tant qu'original et supprimez le nouveau superutilisateur.
shacker
173
  1. python manage.py createsuperuser créera un autre superutilisateur, vous pourrez vous connecter à l'administrateur et mémoriser votre nom d'utilisateur.
  2. Oui pourquoi pas.

Pour donner un privilège d'utilisateur normal, ouvrez un shell avec python manage.py shellet essayez:

from django.contrib.auth.models import User
user = User.objects.get(username='normaluser')
user.is_superuser = True
user.save()
DrTyrsa
la source
Si c'est possible, comment faire?
IamH1kc
Avec cette approche semble que l'utilisateur ne peut pas accéder à django admin
keul
3
@LucaFabbri que vous devez également définiruser.is_staff = True
Aaron McMillin
122

Vous pouvez essayer via la console:

python manage.py shell

puis utilisez le script suivant dans le shell

from django.contrib.auth.models import User
User.objects.filter(is_superuser=True)

vous répertoriera tous les super utilisateurs du système. si vous reconnaissez votre nom d'utilisateur dans la liste:

usr = User.objects.get(username='your username')
usr.set_password('raw password')
usr.save()

et vous définissez un nouveau mot de passe (:

Ange déchu
la source
12
User.objects.filter(is_superuser=True)
DrTyrsa
pip install django-extensions, ajoutez-le installed appset exécutez ./manage.py shell_plus. Le Usercours sera disponible et vous le pouvez password-change.
Timo
Cette méthode permet à l'utilisateur de définir n'importe quel mot de passe, sans aucune validation. Vous pouvez ainsi définir un mot de passe très simple (uniquement à des fins de test), ce que la méthode de réponse acceptée ne permet pas.
Gautam J
23

Vous pouvez créer un nouveau superutilisateur avec la createsuperusercommande.

Aldarund
la source
14

C'est une très bonne question.

python manage.py changepassword nom_utilisateur

Exemple :-

python manage.py changepassword mickey
anand24
la source
11

la nouvelle configuration doit d' abord s'exécuter python manage.py createsuperuser pour créer un utilisateur. Il semble qu'il n'y ait pas de mot de passe par défaut pour se connecter à l'administrateur.

Kiran P.
la source
9

L'une des meilleures façons de récupérer le nom d'utilisateur et le mot de passe est de les afficher et de les mettre à jour. Le modèle utilisateur fournit un moyen parfait de le faire.

Dans ce cas, j'utilise Django 1.9

  1. Accédez à votre répertoire racine i, e. où se trouve votre fichier "manage.py" à l'aide de votre console ou d'une autre application telle que Git.
  2. Récupérez le shell Python à l'aide de la commande "shell python manage.py".
  3. Importez le modèle utilisateur en tapant la commande suivante "from django.contrib.auth.models import User"
  4. Obtenez tous les utilisateurs en tapant la commande suivante "users = User.objects.all ()"
  5. Imprimer une liste des utilisateurs Pour les utilisateurs de Python 2, utilisez la commande "imprimer les utilisateurs" Pour les utilisateurs de Python 3, utilisez la commande "imprimer (utilisateurs)" Le premier utilisateur est généralement l'administrateur.

  6. Sélectionnez l'utilisateur dont vous souhaitez modifier le mot de passe, par exemple

    "user = users[0]"

  7. Définissez le mot de passe

    user.set_password('name_of_the_new_password_for_user_selected')

  8. Enregistrez le nouveau mot de passe

    "user.save()"

Démarrez le serveur et connectez-vous en utilisant le nom d'utilisateur et le mot de passe mis à jour.

Stephen Mwangi Wanjohi
la source
L'avantage de cette méthode manage.py changepasswordest que vous n'êtes pas limité aux mots de passe que vous pouvez ou ne pouvez pas utiliser - plus trop similaire à la merde de nom d'utilisateur. (C'est dans mon environnement de développement. Je ne préconise pas des mots de passe plus faibles. Vous devriez toujours utiliser des mots de passe forts dans prod.)
Shashwat Black
5

Vous pouvez également avoir mal répondu à une question de configuration et n'avoir aucun membre du personnel. Dans ce cas, rendez-vous aux postgres:

obvioustest=# \c [yourdatabasename]
obvioustest=# \x
obvioustest=# select * from auth_user;
-[ RECORD 1 ]+-------------
id           | 1
is_superuser | f
is_staff     | f
...

Pour corriger, modifiez directement:

update auth_user set is_staff='true' where id=1;
Bryce
la source
5

Deux façons de procéder:

La changepassword commande de gestion :

(env) $ python manage.py changepassword <username>

Ou (qui développe quelques réponses, mais fonctionne pour tout modèle utilisateur étendu) en utilisant le shell django-admin comme suit:

(env) $ python manage.py shell

Cela devrait faire apparaître l'invite de commande du shell comme suit:

Python 3.7.2 (default, Mar 27 2019, 08:44:46) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Ensuite, vous voudriez ce qui suit:

>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> user = User.objects.get(username='[email protected]')
>>> user.set_password('new password')
>>> user.save()
>>> exit()

NB Pourquoi ai-je répondu à cette question avec cette réponse?

Parce que, comme mentionné, User = get_user_model()fonctionnera pour vos propres Usermodèles personnalisés . L'utilisation de from django.contrib.auth.models import Userpuis User.objects.get(username='username')peut générer l'erreur suivante:

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'
Micheal J. Roberts
la source
4

Si vous avez oublié de créer un administrateur, commencez par en créer un avec la createsuperusercommande, manage.pypuis modifiez le mot de passe.

rapid2share
la source
4

Vous pouvez essayer ceci:

1.Modifier le mot de passe du superutilisateur sans console

python manage.py changepassword <username>

2.Modifier le mot de passe du superutilisateur via la console

entrez la description de l'image ici entrez la description de l'image ici

Mr Singh
la source
1
L'utilisation de captures d'écran au lieu de code écrit est une très mauvaise pratique. Poeple ne peut pas copier-coller votre code pour le tester et il n'est pas disponible pour une recherche sur site
FallenAngel
3

Si vous ne connaissez pas les noms d'utilisateur créés ici. Vous pouvez obtenir les utilisateurs comme décrit par @FallenAngel ci-dessus.

python manage.py shell 
from django.contrib.auth.models import User
usrs = User.objects.filter(is_superuser=True)
#identify the user
your_user = usrs.filter(username="yourusername")[0]
#youruser = usrs.get(username="yourusername")
#then set the password

Cependant dans le cas où vous avez créé votre modèle d'utilisateur indépendant. Un cas simple est lorsque vous souhaitez utiliser le courrier électronique comme nom d'utilisateur au lieu du nom d'utilisateur par défaut. Dans ce cas, votre modèle utilisateur vit quelque part, comme your_accounts_app.models, alors la solution ci-dessus ne fonctionnera pas. Dans ce cas, vous pouvez utiliser à la place la méthode get_user_model

from django.contrib.auth import get_user_model 
super_users = get_user_model().objects.filter(is_superuser=True)
#proceed to get identify your user
# and set their user password
unlockme
la source
3

si vous oubliez votre administrateur, vous devez créer un nouvel utilisateur en utilisant

python manage.py createsuperuser <username>

et pour le mot de passe, il y a une commande CLI changepassword pour django pour changer le mot de passe de l'utilisateur

python manage.py changepassword <username>

OU

django-admin changepassword <username>

OU Exécutez ce code dans Django env

from django.contrib.auth.models import User
u = User.objects.get(username='john')
u.set_password('new password')
u.save()
Saurabh Chandra Patel
la source
2

Une autre chose à noter est de définir le statut de votre utilisateur is_staffcomme actif. Du moins, c'est ce qui fait que ça marche pour moi. Pour plus de détails, j'en ai créé un autre superusercomme les gens l'ont expliqué ci-dessus. Ensuite, je vais dans la table de base de données auth_useret recherche ce nom d'utilisateur pour m'assurer que son is_staffindicateur est défini sur 1. Cela m'a finalement permis de me connecter au adminsite.

user1330974
la source
2

Créez un nouveau superutilisateur avec la commande "python manage.py createuperuser". Connectez-vous en tant que nouveau super utilisateur. Cliquez sur le lien "utilisateurs". Cliquez ensuite sur l'utilisateur que vous souhaitez supprimer. cliquez sur supprimer l'utilisateur à la fin de la page du formulaire.

Remarque - Le processus ci-dessus apportera des modifications aux journaux d'activité effectués par cet utilisateur particulier.

Ishan Dixit
la source
1

python manage.py changepassword nom d'utilisateur

Règles de base
la source
1

utilisation

python manage.py dumpdata

puis regardez à la fin vous trouverez le nom d'utilisateur

canard donald
la source
0

La meilleure façon est de vous rendre sur votre terminal et de taper

python manage.py createsuperuser

et insérez à nouveau un autre mot de passe et nom d'utilisateur, mais vous perdrez une partie de votre profil que vous avez créé auparavant dans la plupart des cas.

CAP.tech
la source
0

Je pense que la meilleure façon Sur la ligne de commande

python manage.py crée un superutilisateur

nevriye gül
la source
0

C'est très simple, il suffit de taper cette commande en ligne de commande

python manage.py changepassword votre nom d'utilisateur

Shrey
la source
-1

Une autre façon d'obtenir le nom d'utilisateur (et la plupart des informations) consiste à accéder directement à la base de données et à lire les informations des tables.

Mutken
la source