Wenn Google uns dazu gebracht hat, nach Antworten zu suchen, anstatt über sie nachzudenken, werden wir durch Stackoverflow nach Antworten gefragt, anstatt sie überhaupt zu suchen.
Sykora
2
-1 für 'plzsendmetehcodes'. Übrigens sollten Sie die richtige Antwort auf Ihre Fragen akzeptieren.
Cat Plus Plus
8
Ja, ich habe Google oft benutzt und tue es immer noch. Aber SO ist einfacher und schneller, und Sie können sich an Diskussionen beteiligen und alternative Antworten hören. Solange es Leute wie Svetlozer Angelov und andere gibt, die bereit sind, ihre Zeit (und Punkte) für die Beantwortung einfacher Fragen zu investieren, ist SO genau dafür.
DOK
7
Django verfügt über eine so umfassende und leicht zugängliche Dokumentation, dass die laufenden Versuche, die gesamte Dokumentation jemals in SO-Antworten zu replizieren, möglicherweise keinen Mehrwert bringen können.
Ben James
3
@ Ben James: so ein guter Punkt. Deshalb gebe ich, anstatt die Dokumentation in meinen Antworten neu zu schreiben, nur die Barebone-Informationen und den Link zu den Dokumenten.
Cethegeek
Antworten:
158
Django wird mit einem Benutzerauthentifizierungssystem geliefert. Es verwaltet Benutzerkonten, Gruppen, Berechtigungen und Cookie-basierte Benutzersitzungen. Dieses Dokument erklärt, wie die Dinge funktionieren.
Wenn Sie das django.contrib.adminin Ihrem haben INSTALLED_APPS, können Sie besuchen: example.com/path-to-admin/password_change/welches ein Formular hat, um Ihr altes Passwort zu bestätigen und das neue Passwort zweimal einzugeben.
Ich glaube nicht, dass dies dazu beiträgt, Seiten zu erstellen, auf denen Benutzer ihre eigenen Passwörter ändern können - nur ein Administrator, der dies tut.
Micah Walter
25
Sie können auch einfach die django.contrib.auth.views.password_changeAnsicht in Ihrer URLconf verwenden. Es werden ein Standardformular und eine Standardvorlage verwendet. Die Lieferung Ihrer eigenen ist optional.
Es ist nicht nötig, zur Shell zu gehen, passwd einzugeben und passwd erneut einzugeben
python manage.py changepassword <username>
or
/manage.py changepassword <username>
Shell verwenden
python manage.py shell
from django.contrib.auth.models import User
users=User.objects.filter(email='<user_email>')
#you can user username or etc to get users query set#you can also use get method to get users
user=users[0]
user.set_password('__enter passwd__')
user.save()
exit()
Sobald das URL-Muster hinzugefügt wurde, wie in der Antwort von Ciro Santilli gezeigt, können Benutzer Kennwörter schnell ändern, indem sie ihnen "Mitarbeiterzugriff" für die Verwaltungsfunktionen gewähren. Wenn Sie sie keiner Gruppe hinzufügen oder ihnen spezielle Berechtigungen erteilen, können sie ihr Kennwort dennoch auf der Seite example.com/admin ändern. Über den Mitarbeiterzugriff können sie die Seite aufrufen, auch wenn sie leer ist. In der oberen rechten Ecke können sie auf "Passwort ändern" klicken und die Administratorfunktion verwenden.
Dies ist der Befehl, den ich verwendet habe, nur für den Fall, dass Sie Probleme mit diesem Wurf haben AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'.
python manage.py shell -c "from django.contrib.auth import get_user_model;
User = get_user_model();
u = User.objects.get(username='admin');
u.set_password('password123');
u.save()"
Ich habe diese Technik für das benutzerdefinierte Benutzermodell verwendet, das vom AbstractUserModell abgeleitet ist . Es tut mir leid, wenn ich die Klasse und die Unterklasse technisch falsch geschrieben habe, aber die Technik hat gut funktioniert.
Antworten:
So ändern Sie Django-Passwörter
Siehe den Abschnitt Ändern von Passwörtern
Navigation zu Ihrem Projekt, in dem sich die
manage.py
Datei befindet$ python manage.py shell
Geben Sie die folgenden Skripte ein:
Sie können auch den einfachen
manage.py
Befehl verwenden:manage.py changepassword *username*
Geben Sie einfach zweimal das neue Passwort ein.
aus dem Abschnitt Ändern von Passwörtern in den Dokumenten.
Wenn Sie das
django.contrib.admin
in Ihrem habenINSTALLED_APPS
, können Sie besuchen:example.com/path-to-admin/password_change/
welches ein Formular hat, um Ihr altes Passwort zu bestätigen und das neue Passwort zweimal einzugeben.quelle
Sie können auch einfach die
django.contrib.auth.views.password_change
Ansicht in Ihrer URLconf verwenden. Es werden ein Standardformular und eine Standardvorlage verwendet. Die Lieferung Ihrer eigenen ist optional.quelle
Es ist nicht nötig, zur Shell zu gehen, passwd einzugeben und passwd erneut einzugeben
python manage.py changepassword <username> or /manage.py changepassword <username>
Shell verwenden
python manage.py shell from django.contrib.auth.models import User users=User.objects.filter(email='<user_email>') #you can user username or etc to get users query set #you can also use get method to get users user=users[0] user.set_password('__enter passwd__') user.save() exit()
quelle
urls.py
::urlpatterns = [ url(r'^accounts/', include('django.contrib.auth.urls')),
Vorlage:
<a href="{% url 'password_change' %}">{% trans "Change password" %}</a>
Dokumentiert unter: https://docs.djangoproject.com/de/1.9/topics/auth/default/#using-the-views
quelle
Dieses Tutorial zeigt, wie es mit funktionsbasierten Ansichten gemacht wird:
Datei ansehen:
from django.contrib import messages from django.contrib.auth import update_session_auth_hash from django.contrib.auth.forms import PasswordChangeForm from django.shortcuts import render, redirect def change_password(request): if request.method == 'POST': form = PasswordChangeForm(request.user, request.POST) if form.is_valid(): user = form.save() update_session_auth_hash(request, user) # Important! messages.success(request, 'Your password was successfully updated!') return redirect('change_password') else: messages.error(request, 'Please correct the error below.') else: form = PasswordChangeForm(request.user) return render(request, 'accounts/change_password.html', { 'form': form })
URL-Datei:
from django.conf.urls import url from myproject.accounts import views urlpatterns = [ url(r'^password/$', views.change_password, name='change_password'), ]
Und schließlich die Vorlage:
<form method="post"> {% csrf_token %} {{ form }} <button type="submit">Save changes</button> </form>
quelle
Sobald das URL-Muster hinzugefügt wurde, wie in der Antwort von Ciro Santilli gezeigt, können Benutzer Kennwörter schnell ändern, indem sie ihnen "Mitarbeiterzugriff" für die Verwaltungsfunktionen gewähren. Wenn Sie sie keiner Gruppe hinzufügen oder ihnen spezielle Berechtigungen erteilen, können sie ihr Kennwort dennoch auf der Seite example.com/admin ändern. Über den Mitarbeiterzugriff können sie die Seite aufrufen, auch wenn sie leer ist. In der oberen rechten Ecke können sie auf "Passwort ändern" klicken und die Administratorfunktion verwenden.
quelle
Dies ist der Befehl, den ich verwendet habe, nur für den Fall, dass Sie Probleme mit diesem Wurf haben
AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'
.python manage.py shell -c "from django.contrib.auth import get_user_model; User = get_user_model(); u = User.objects.get(username='admin'); u.set_password('password123'); u.save()"
quelle
Verwenden Sie gemäß der Dokumentation :
from django.contrib.auth.hashers import makepassword
Der Hauptgrund dafür ist, dass Django Hash-Passwörter zum Speichern in der Datenbank verwendet.
password=make_password(password,hasher='default') obj=User.objects.filter(empid=emp_id).update(username=username,password=password)
Ich habe diese Technik für das benutzerdefinierte Benutzermodell verwendet, das vom
AbstractUser
Modell abgeleitet ist . Es tut mir leid, wenn ich die Klasse und die Unterklasse technisch falsch geschrieben habe, aber die Technik hat gut funktioniert.quelle
Sehr ähnlich der Antwort von @ Ciro, jedoch spezifischer für die ursprüngliche Frage (ohne alle Authentifizierungsansichten hinzuzufügen):
einfach hinzufügen
urlpatterns
inurls.py
:url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'),
Beachten Sie, dass
post_change_redirect
die URL angegeben wird, die nach dem Ändern des Kennworts umgeleitet werden soll.Dann fügen Sie einfach Ihrer Vorlage hinzu:
<a href="{% url 'password_change' %}">Change Password</a>
quelle