¿Cómo permitir a los usuarios cambiar sus propias contraseñas en Django?

¿Puede alguien indicarme el código donde los usuarios pueden cambiar sus propias contraseñas en Django?

Django viene con un sistema de autenticación de usuario. Maneja cuentas de usuario, grupos, permisos y sesiones de usuario basadas en cookies. Este documento explica cómo funcionan las cosas.

Cómo cambiar las contraseñas de Django

Vea la sección Cambiando contraseñas

  1. Navegación a su proyecto donde se encuentra el archivo manage.py

  2. $ python manage.py shell

  3. escriba debajo de los scripts:

 desde django.contrib.auth.models import User
 u = User.objects.get (username__exact = 'john')
 u.set_password ('nueva contraseña')
 u.save ()

También puedes usar el simple comando manage.py :

manage.py changepassword *username*

Simplemente introduzca la nueva contraseña dos veces.

de la sección Cambiando contraseñas en los documentos.


Si tiene el django.contrib.admin en su INSTALLED_APPS , puede visitar: example.com/path-to-admin/password_change/ que tendrá un formulario para confirmar su contraseña anterior e ingresar la nueva contraseña dos veces.

También puede usar la vista django.contrib.auth.views.password_change en su URLconf. Utiliza una forma y plantilla por defecto; el suministro de la suya es opcional.

Es sin necesidad de ir a shell ingresar passwd y volver a ingresar passwd

  python manage.py changepassword  or /manage.py changepassword  

Usando shell

 python manage.py shell from django.contrib.auth.models import User users=User.objects.filter(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')), 

Modelo:

 {% trans "Change password" %} 

Documentado en: https://docs.djangoproject.com/en/1.9/topics/auth/default/#using-the-views

Este tutorial muestra cómo hacerlo con vistas basadas en funciones:

Ver archivo:

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

Archivo url:

 from django.conf.urls import url from myproject.accounts import views urlpatterns = [ url(r'^password/$', views.change_password, name='change_password'), ] 

Y por último, la plantilla:

 
{% csrf_token %} {{ form }}

Muy similar a la respuesta de @Ciro, pero más específica a la pregunta original (sin agregar todas las vistas de autenticación):

solo agregue a urlpatterns en urls.py :

 url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'), 

Tenga en cuenta que post_change_redirect especifica la url para redirigir después de cambiar la contraseña.

Luego, simplemente agregue a su plantilla:

 Change Password 

Una vez que se agrega el patrón de URL como se muestra en la respuesta de Ciro Santilli, una forma rápida de permitir a los usuarios cambiar las contraseñas es darles “acceso de personal” para las funciones de administración. Si no los agrega a ningún grupo o no les otorga permisos especiales, aún pueden cambiar su contraseña en la página example.com/admin. El acceso del personal les permite ir a la página aunque esté en blanco; en la esquina superior derecha pueden hacer clic en “cambiar contraseña” y usar la funcionalidad de administración.

Este es el comando que utilicé, en caso de que tenga un problema al lanzar AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User' 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()"