Kann mich jemand auf einen Code verweisen, in dem Benutzer ihre eigenen Passwörter in Django ändern können?
Kann mich jemand auf einen Code verweisen, in dem Benutzer ihre eigenen Passwörter in Django ändern können?
Antworten:
Django wird mit einem Benutzerauthentifizierungssystem geliefert. Es verwaltet Benutzerkonten, Gruppen, Berechtigungen und Cookie-basierte Benutzersitzungen. Dieses Dokument erklärt, wie die Dinge funktionieren.
So ändern Sie Django-Passwörter
Siehe den Abschnitt Ändern von Passwörtern
Navigation zu Ihrem Projekt, in dem sich die manage.pyDatei befindet
$ python manage.py shell
Geben Sie die folgenden Skripte ein:
aus django.contrib.auth.models Benutzer importieren
u = User.objects.get (Benutzername__exact = 'john')
u.set_password ('neues Passwort')
u.save ()
Sie können auch den einfachen manage.pyBefehl 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.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.
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()
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
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>
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()"
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 AbstractUserModell abgeleitet ist . Es tut mir leid, wenn ich die Klasse und die Unterklasse technisch falsch geschrieben habe, aber die Technik hat gut funktioniert.
Sehr ähnlich der Antwort von @ Ciro, jedoch spezifischer für die ursprüngliche Frage (ohne alle Authentifizierungsansichten hinzuzufügen):
einfach hinzufügen urlpatternsin urls.py:
url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'),
Beachten Sie, dass post_change_redirectdie 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>