Si Google nos hizo buscar respuestas en lugar de pensar en ellas, stackoverflow nos hace pedir respuestas en lugar de incluso buscarlas.
Sykora
2
-1 para 'plzsendmetehcodes'. Por cierto, debe aceptar la respuesta correcta a sus preguntas.
Cat Plus Plus
8
Sí, solía usar Google mucho y todavía lo hago. Pero SO es más fácil y rápido, y puede participar en debates y escuchar respuestas alternativas. Siempre que haya personas como Svetlozer Angelov y otros, que estén dispuestos a invertir su tiempo (y ganar puntos) por responder preguntas simples, bueno, para eso es SO.
DOK
7
Django tiene una documentación tan completa y de fácil acceso, que los intentos continuos de replicar toda la documentación en las respuestas SO no pueden agregar ningún valor.
Ben James
3
@Ben James: un buen punto. En realidad, es por eso que en lugar de reescribir la documentación en mis respuestas, solo doy la información básica y el enlace a los documentos.
cethegeek
Respuestas:
159
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.
Si tiene el django.contrib.adminen 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.
No creo que esto ayude a crear páginas para que los usuarios cambien sus propias contraseñas, solo un administrador para hacerlo.
Micah Walter
25
También puede usar la django.contrib.auth.views.password_changevista 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()
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()"
Utilicé esta técnica para el modelo de usuario personalizado que se deriva del AbstractUsermodelo. Lamento si técnicamente escribí mal la clase y la subclase, pero la técnica funcionó bien.
Respuestas:
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:
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 suINSTALLED_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.fuente
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.fuente
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()
fuente
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
fuente
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>
fuente
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.
fuente
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()"
fuente
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.fuente
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
enurls.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>
fuente