Qualcuno può indicarmi un codice in cui gli utenti possono modificare le proprie password in Django?
Qualcuno può indicarmi un codice in cui gli utenti possono modificare le proprie password in Django?
Risposte:
Django viene fornito con un sistema di autenticazione utente. Gestisce account utente, gruppi, autorizzazioni e sessioni utente basate sui cookie. Questo documento spiega come funzionano le cose.
Come cambiare le password Django
Vedere la sezione Modifica delle password
Navigazione al progetto in cui si manage.pytrova il file
$ python manage.py shell
digitare sotto gli script:
da django.contrib.auth.models importa l'utente
u = User.objects.get (username__exact = 'john')
u.set_password ('nuova password')
salva ()
Puoi anche usare il semplice manage.pycomando:
manage.py changepassword *username*
Basta inserire due volte la nuova password.
dalla sezione Modifica delle password nella documentazione.
Se hai il django.contrib.adminnel tuo INSTALLED_APPS, puoi visitare: example.com/path-to-admin/password_change/che avrà un modulo per confermare la tua vecchia password e inserire due volte la nuova password.
Non è necessario andare alla shell, immettere passwd e reinserire passwd
python manage.py changepassword <username>
or
/manage.py changepassword <username>
Utilizzando shell
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()
Questo tutorial mostra come farlo con le viste basate sulle funzioni:
Vedi il file:
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
})
File URL:
from django.conf.urls import url
from myproject.accounts import views
urlpatterns = [
url(r'^password/$', views.change_password, name='change_password'),
]
E infine, il modello:
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Save changes</button>
</form>
urls.py:
urlpatterns = [
url(r'^accounts/', include('django.contrib.auth.urls')),
Modello:
<a href="{% url 'password_change' %}">{% trans "Change password" %}</a>
Documentato su: https://docs.djangoproject.com/en/1.9/topics/auth/default/#using-the-views
Una volta aggiunto il pattern URL come mostrato nella risposta di Ciro Santilli, un modo rapido per consentire agli utenti di modificare le password è quello di dare loro "accesso personale" per le funzioni di amministrazione. Se non li aggiungi a nessun gruppo o non concedi loro autorizzazioni speciali, possono comunque modificare la password andando alla pagina example.com/admin. L'accesso del personale consente loro di accedere alla pagina anche se è vuota; nell'angolo in alto a destra possono fare clic su "cambia password" e utilizzare le funzionalità di amministrazione.
Questo è il comando che ho usato, nel caso in cui tu abbia problemi in quel lancio 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()"
Per la documentazione , utilizzare:
from django.contrib.auth.hashers import makepassword
Il motivo principale per farlo è che Django utilizza password con hash per archiviarle nel database.
password=make_password(password,hasher='default')
obj=User.objects.filter(empid=emp_id).update(username=username,password=password)
Ho usato questa tecnica per il modello utente personalizzato derivato dal AbstractUsermodello. Mi dispiace se tecnicamente ho scritto male la classe e la sottoclasse, ma la tecnica ha funzionato bene.
Molto simile alla risposta di @ Ciro, ma più specifica alla domanda originale (senza aggiungere tutte le viste di autenticazione):
basta aggiungere a urlpatternsin urls.py:
url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'),
Nota che post_change_redirectspecifica l'URL da reindirizzare dopo la modifica della password.
Quindi, aggiungi semplicemente al tuo modello:
<a href="{% url 'password_change' %}">Change Password</a>