Wie setze ich das Django-Administratorkennwort zurück?


448

Ich verwende Django (Version 1.3) und habe sowohl den Administrator-Benutzernamen als auch das Passwort vergessen. Wie setze ich beide zurück?

Und ist es möglich, einen normalen Benutzer zum Administrator zu machen und dann den Administratorstatus zu entfernen?

Antworten:


781
python manage.py changepassword <user_name>

siehe docs


7
Ich habe gerade festgestellt, dass Sie gesagt haben, Sie hätten den Benutzernamen vergessen ... 'admin' als Benutzername in meiner Antwort ist dann keine große Hilfe!
JamesO

8
@ user794916 Das ist eine ziemlich seltsame Wahl, wenn Sie sich nicht an den Benutzernamen erinnern. :-)
DrTyrsa

1
Sie können den Benutzernamen von "admin" in einen anderen richtigen Benutzernamen ändern. : D
mxi1

4
Django ist das Beste. Alles ist so einfach
DMTintner

5
Wenn Sie den Benutzernamen vergessen haben, können Sie manage.py createsuperusereinen zweiten Superuser erstellen und dann die Liste der Benutzer anzeigen, um den ursprünglichen zu finden. Melden Sie sich dann als Original an und löschen Sie den neuen Superuser.
Shacker

173
  1. python manage.py createsuperuser Wenn Sie einen weiteren Superuser erstellen, können Sie sich bei admin anmelden und Ihren Benutzernamen erneut speichern.
  2. Ja, warum nicht.

Um einem normalen Benutzer Berechtigungen zu erteilen, öffnen Sie eine Shell mit python manage.py shellund versuchen Sie:

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

Wenn es möglich ist, wie geht das?
IamH1kc

Mit diesem Ansatz scheint, dass der Benutzer nicht auf django admin zugreifen kann
keul

3
@ LucaFabbri müssten Sie auch einstellenuser.is_staff = True
Aaron McMillin

122

Sie können es über die Konsole versuchen:

python manage.py shell

Verwenden Sie dann das folgende Skript in der Shell

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

listet euch alle Superuser im System auf. Wenn Sie Ihren Benutzernamen aus der Liste erkennen:

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

und Sie legen ein neues Passwort fest (:


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

pip install django-extensions, füge es hinzu installed appsund starte ./manage.py shell_plus. Die UserKlasse wird verfügbar sein und Sie können password-change.
Timo

Mit dieser Methode kann der Benutzer ein beliebiges Kennwort ohne Validierung festlegen. Sie können daher ein sehr einfaches Passwort festlegen (nur zu Testzwecken), das die akzeptierte Antwortmethode nicht zulässt.
Gautam J


14

Das ist eine sehr gute Frage.

python manage.py changepassword user_name

Beispiel: -

python manage.py changepassword mickey

11

Das neue Setup sollte zuerst ausgeführt werden python manage.py createsuperuser , um einen Benutzer zu erstellen. Es scheint, dass es kein Standardkennwort für den Benutzernamen gibt, um sich bei admin anzumelden.


9

Eine der besten Möglichkeiten, den Benutzernamen und das Kennwort abzurufen, besteht darin, sie anzuzeigen und zu aktualisieren. Das Benutzermodell bietet eine perfekte Möglichkeit, dies zu tun.

In diesem Fall verwende ich Django 1.9

  1. Navigieren Sie zu Ihrem Stammverzeichnis i, e. Die Datei "manage.py" befindet sich mithilfe Ihrer Konsole oder einer anderen Anwendung wie Git.
  2. Rufen Sie die Python-Shell mit dem Befehl "python manage.py shell" ab.
  3. Importieren Sie das Benutzermodell, indem Sie den folgenden Befehl "from django.contrib.auth.models import user" eingeben.
  4. Holen Sie sich alle Benutzer, indem Sie den folgenden Befehl eingeben: "users = User.objects.all ()"
  5. Drucken einer Benutzerliste Für Python 2-Benutzer verwenden Sie den Befehl "Benutzer drucken". Für Python 3-Benutzer verwenden Sie den Befehl "Drucken (Benutzer)". Der erste Benutzer ist normalerweise der Administrator.

  6. Wählen Sie den Benutzer aus, dessen Passwort Sie ändern möchten, z

    "user = users[0]"

  7. Legen Sie das Passwort fest

    user.set_password('name_of_the_new_password_for_user_selected')

  8. Speichern Sie das neue Passwort

    "user.save()"

Starten Sie den Server und melden Sie sich mit dem Benutzernamen und dem aktualisierten Passwort an.


Der Vorteil dieser Methode gegenüber manage.py changepasswordist, dass Sie nicht auf die Passwörter beschränkt sind, die Sie verwenden können oder nicht - nicht mehr zu ähnlich wie bei Benutzernamen. (Dies ist in meiner Entwicklungsumgebung. Ich befürworte keine schwächeren Passwörter. Sie sollten immer starke Passwörter in Prod verwenden.)
Shashwat Black

5

Möglicherweise haben Sie auch eine falsche Setup-Frage beantwortet und haben keine Mitarbeiter. In diesem Fall gehen Sie zu Postgres:

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

Zum Reparieren direkt bearbeiten:

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

5

Zwei Möglichkeiten, dies zu tun:

Der changepassword Verwaltungsbefehl :

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

Oder (das einige Antworten erweitert, aber für jedes erweiterte Benutzermodell funktioniert) die Django-Admin-Shell wie folgt verwenden:

(env) $ python manage.py shell

Dies sollte die Shell-Eingabeaufforderung wie folgt aufrufen:

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

Dann möchten Sie Folgendes:

>>> 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 Warum habe ich diese Frage mit dieser Antwort beantwortet?

Weil, wie erwähnt, User = get_user_model()für Ihre eigenen benutzerdefinierten UserModelle funktioniert . Die Verwendung von from django.contrib.auth.models import Userthen User.objects.get(username='username')kann den folgenden Fehler auslösen:

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

4

Wenn Sie vergessen haben, einen Administrator zu erstellen, erstellen Sie zuerst einen mit dem createsuperuserBefehl on manage.pyund ändern Sie dann das Kennwort.


4

Sie können dies versuchen:

1. Ändern Sie das Superuser-Passwort ohne Konsole

python manage.py changepassword <username>

2.Ändern Sie das Superuser-Passwort über die Konsole

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein


1
Die Verwendung von Screenshots anstelle von geschriebenem Code ist eine sehr schlechte Praxis. Menschen können Ihren Code nicht kopieren und einfügen, um ihn zu testen, und er ist nicht für die In-Site-Suche verfügbar
FallenAngel

3

Falls Sie die hier erstellten Benutzernamen nicht kennen. Sie können die Benutzer wie oben von @FallenAngel beschrieben abrufen.

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

Für den Fall, dass Sie Ihr unabhängiges Benutzermodell erstellt haben. Ein einfacher Fall ist, wenn Sie E-Mail als Benutzernamen anstelle des Standardbenutzernamens verwenden möchten. In diesem Fall befindet sich Ihr Benutzermodell an einem Ort wie your_accounts_app.models, und die oben genannte Lösung funktioniert nicht. In diesem Fall können Sie stattdessen die Methode get_user_model verwenden

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

Wenn Sie Ihren Administrator vergessen haben, müssen Sie mithilfe von einen neuen Benutzer erstellen

python manage.py createsuperuser <username>

und für das Passwort gibt es einen CLI-Befehl changepassword für django, um das Benutzerkennwort zu ändern

python manage.py changepassword <username>

ODER

django-admin changepassword <username>

ODER Führen Sie diesen Code in Django env aus

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

2

Eine weitere erwähnenswerte Sache ist, den Status Ihres Benutzers is_staffals aktiv festzulegen. Zumindest funktioniert das bei mir. Für weitere Details habe ich eine andere erstellt, superuserwie oben erläutert. Dann gehe ich zur Datenbanktabelle auth_userund suche nach diesem Benutzernamen, um sicherzustellen, dass sein is_staffFlag auf gesetzt ist 1. Das erlaubte mir schließlich, mich vor Ort anzumelden admin.


2

Erstellen Sie einen neuen Superuser mit dem Befehl "python manage.py createduperuser". Melden Sie sich als neuer Superuser an. Klicken Sie auf den Link "Benutzer". Klicken Sie dann auf den Benutzer, den Sie löschen möchten. Klicken Sie am Ende der Formularseite auf Benutzer löschen.

Hinweis - Mit dem oben beschriebenen Vorgang werden Änderungen an den Aktivitätsprotokollen vorgenommen, die von diesem bestimmten Benutzer erstellt wurden.



1

verwenden

python manage.py dumpdata

Dann schauen Sie am Ende nach dem Benutzernamen


0

Der beste Weg ist, einfach zu Ihrem Terminal zu gehen und zu tippen

python manage.py createsuperuser

und geben Sie erneut ein Passwort und einen Benutzernamen ein, aber Sie verlieren in den meisten Fällen einen Teil Ihres Profils, das Sie zuvor erstellt haben.


0

Ich denke, der bessere Weg an der Kommandozeile

python manage.py erstellt einen Superuser


0

Es ist sehr einfach, diesen Befehl einfach in Ihre Befehlszeile einzugeben

python manage.py changepassword yourusername


-1

Eine andere Möglichkeit, den Benutzernamen (und die meisten Informationen) abzurufen, besteht darin, direkt auf die Datenbank zuzugreifen und die Informationen aus den Tabellen zu lesen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.