¿Alguien puede indicarme un código donde los usuarios pueden cambiar sus propias contraseñas en Django?
¿Alguien puede indicarme un código donde los usuarios pueden cambiar sus propias contraseñas en Django?
Django viene con un sistema de autenticación de usuarios. 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
Consulte la sección Cambio de contraseñas
Navegación a su proyecto donde se manage.py
encuentra el archivo
$ python manage.py shell
escriba a continuación 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 puede usar el manage.py
comando simple :
manage.py changepassword *username*
Simplemente ingrese la nueva contraseña dos veces.
de la sección Cambiar 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 django.contrib.auth.views.password_change
vista en su URLconf. Utiliza un formulario y una plantilla predeterminados; el suministro de los suyos es opcional.
Es sin necesidad de ir al shell, ingresar passwd y volver a ingresar passwd
python manage.py changepassword <username>
or
/manage.py changepassword <username>
Usando 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()
urls.py
:
urlpatterns = [
url(r'^accounts/', include('django.contrib.auth.urls')),
Modelo:
<a href="{% url 'password_change' %}">{% trans "Change password" %}</a>
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 finalmente, la plantilla:
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Save changes</button>
</form>
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 que los usuarios cambien las contraseñas es darles "acceso de personal" para las funciones de administración. Si no los agrega a ningún grupo ni les otorga permisos especiales, aún pueden cambiar su contraseña yendo a la página example.com/admin. El acceso al personal les permite ir a la página incluso si 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 problemas en ese lanzamiento 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()"
Según la documentación , utilice:
from django.contrib.auth.hashers import makepassword
La razón principal para hacer esto es que Django usa contraseñas hash para almacenar en la base de datos.
password=make_password(password,hasher='default')
obj=User.objects.filter(empid=emp_id).update(username=username,password=password)
Utilicé esta técnica para el modelo de usuario personalizado que se deriva del AbstractUser
modelo. Lamento si técnicamente escribí mal la clase y la subclase, pero la técnica funcionó bien.
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 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:
<a href="{% url 'password_change' %}">Change Password</a>