Come resettare la password dell'amministratore di Django?


449

Sto usando Django (versione 1.3) e ho dimenticato sia il nome utente che la password dell'amministratore. Come resettare entrambi?

È possibile trasformare un normale utente in admin e quindi rimuovere lo stato di admin?

Risposte:


783
python manage.py changepassword <user_name>

vedi documenti


7
appena realizzato che hai detto che hai dimenticato il nome utente ... 'admin' è il nome utente nella mia risposta non sarà di grande aiuto allora!
JamesO,

8
@ user794916 È una scelta piuttosto strana se non ricordi il nome utente. :-)
DrTyrsa,

1
È possibile modificare il nome utente da "admin" a un altro nome utente appropriato. : D
mxi1

4
Django è il migliore. tutto è così semplice
DMTintner

5
Se hai dimenticato il nome utente, puoi fare manage.py createsuperuserper creare un secondo superutente, quindi visualizzare l'elenco degli utenti per trovare quello originale. Quindi accedi come quello originale ed elimina il nuovo superutente.
shacker

173
  1. python manage.py createsuperuser creerà un altro superutente, sarai in grado di accedere ad admin e ricordare il tuo nome utente.
  2. Si perché no.

Per dare i normali privilegi di utente, apri una shell con python manage.py shelle prova:

from django.contrib.auth.models import User
user = User.objects.get(username='normaluser')
user.is_superuser = True
user.save()

Se è possibile, come si fa?
IamH1kc,

Con questo approccio sembra che l'utente non possa accedere a django admin
keul

3
@LucaFabbri dovresti anche impostareuser.is_staff = True
Aaron McMillin il

122

Puoi provare tramite la console:

python manage.py shell

quindi utilizzare il seguente script nella shell

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

elencherà tutti i super utenti sul sistema. se riconosci il tuo nome utente dall'elenco:

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

e imposti una nuova password (:


12
User.objects.filter(is_superuser=True)
DrTyrsa,

pip install django-extensions, aggiungilo installed appsed eseguilo ./manage.py shell_plus. La Userlezione sarà disponibile e tu potrai password-change.
Timo

Questo metodo consente all'utente di impostare qualsiasi password, senza alcuna convalida. È quindi possibile impostare una password molto semplice (solo a scopo di test), che il metodo di risposta accettato non consente.
Gautam J,


14

Questa è un'ottima domanda.

python manage.py changepassword nome_utente

Esempio :-

python manage.py changepassword mickey

11

la nuova installazione dovrebbe essere eseguita python manage.py createsuperuser per creare l'utente. Sembra che non esista una password nome utente predefinita per accedere all'amministratore.


9

Uno dei modi migliori per recuperare il nome utente e la password è visualizzarli e aggiornarli. Il modello utente fornisce un modo perfetto per farlo.

In questo caso, sto usando Django 1.9

  1. Passare alla directory principale i, e. dove si trova il file "manage.py" usando la console o altre applicazioni come Git.
  2. Recupera la shell Python usando il comando "python manage.py shell".
  3. Importa il modello utente digitando il seguente comando "da django.contrib.auth.models import User"
  4. Ottieni tutti gli utenti digitando il seguente comando "users = User.objects.all ()"
  5. Stampa un elenco degli utenti Per gli utenti di Python 2 utilizzare il comando "stampa utenti" Per gli utenti di Python 3 utilizzare il comando "stampa (utenti)" Il primo utente è generalmente l'amministratore.

  6. Seleziona l'utente che desideri modificare la password, ad es

    "user = users[0]"

  7. Imposta la password

    user.set_password('name_of_the_new_password_for_user_selected')

  8. Salva la nuova password

    "user.save()"

Avviare il server e accedere utilizzando il nome utente e la password aggiornata.


Il vantaggio di questo metodo manage.py changepasswordè che non sei limitato a quali password puoi o non puoi usare - non più troppo simili a crap nome utente. (Questo è nel mio ambiente di sviluppo. Non sto sostenendo password più deboli. Dovresti sempre usare password forti nel prod.)
Shashwat Black

5

Potresti anche aver risposto a una domanda di installazione errata e avere zero membri dello staff. Nel qual caso vai a postgres:

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

Per risolvere, modifica direttamente:

update auth_user set is_staff='true' where id=1;

5

Due modi per farlo:

Il changepassword comando di gestione :

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

Oppure (che si espande su alcune risposte, ma funziona per qualsiasi modello utente esteso) usando la shell django-admin come segue:

(env) $ python manage.py shell

Questo dovrebbe far apparire il prompt dei comandi della shell come segue:

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)
>>>

Quindi vorresti quanto segue:

>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> user = User.objects.get(username='admin@hug.com')
>>> user.set_password('new password')
>>> user.save()
>>> exit()

NB Perché ho risposto a questa domanda con questa risposta?

Perché, come detto, User = get_user_model()funzionerà per i tuoi Usermodelli personalizzati . L'utilizzo di from django.contrib.auth.models import Userallora User.objects.get(username='username')può generare il seguente errore:

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'

4

Se hai dimenticato di creare un utente amministratore, creane uno con il createsuperusercomando attivo, manage.pyquindi modifica la password.


4

Puoi provare questo:

1.Cambia la password del Superutente senza console

python manage.py changepassword <username>

2. Cambiare la password del superutente tramite la console

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


1
L'uso di schermate invece del codice scritto è una pessima pratica. Poeple non può copiare e incollare il codice per testarlo e non è disponibile per la ricerca in loco
FallenAngel

3

Nel caso in cui non si conoscano i nomi utente creati qui. Puoi ottenere gli utenti come descritto da @FallenAngel sopra.

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

Tuttavia, nel caso in cui sia stato creato il modello utente indipendente. Un semplice caso è quando si desidera utilizzare l'e-mail come nome utente anziché come nome utente predefinito. Nel qual caso il tuo modello utente vive da qualche parte come your_accounts_app.models, la soluzione sopra non funzionerà. In questo caso puoi invece usare il metodo 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

3

se si dimentica l'amministratore, è necessario creare un nuovo utente utilizzando

python manage.py createsuperuser <username>

e per la password c'è il comando CLI changepassword per django per cambiare la password dell'utente

python manage.py changepassword <username>

O

django-admin changepassword <username>

OPPURE Esegui questo codice in Django env

from django.contrib.auth.models import User
u = User.objects.get(username='john')
u.set_password('new password')
u.save()

2

Un'altra cosa che vale la pena notare è impostare lo stato dell'utente is_staffcome attivo. Almeno, questo è ciò che fa funzionare per me. Per maggiori dettagli, ne ho creato un altro superusercome spiegato in precedenza. Quindi vado alla tabella del database auth_usere cerco quel nome utente per assicurarmi che il suo is_staffflag sia impostato su 1. Che finalmente mi ha permesso di accedere al adminsito.


2

Crea un nuovo superutente con il comando "python manage.py createuperuser". Accedi come nuovo superutente. Fai clic sul link "utenti". Quindi fare clic sull'utente che si desidera eliminare. fai clic su elimina utente alla fine della pagina del modulo.

Nota: il processo sopra descritto apporta modifiche ai registri delle attività eseguiti da quel particolare utente.



1

uso

python manage.py dumpdata

quindi alla fine troverai il nome utente


0

Il modo migliore è semplicemente andare al terminale e digitare

python manage.py createsuperuser

e inserisci nuovamente un'altra password e nome utente, ma nella maggior parte dei casi perderai parte del tuo profilo che hai creato in precedenza.


0

Penso, il modo migliore alla riga di comando

python manage.py creauperuser


0

È molto semplice digitare questo comando nella tua riga di comando

python manage.py changepassword nomeutente


-1

Un altro modo per ottenere il nome utente (e la maggior parte delle informazioni) è accedere direttamente al database e leggere le informazioni dalle tabelle.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.