web-dev-qa-db-fra.com

Comment permettre aux utilisateurs de changer leurs propres mots de passe dans Django?

Quelqu'un peut-il m'indiquer un code permettant aux utilisateurs de modifier leurs propres mots de passe dans Django?

69
Hulk

Django est livré avec un utilisateur système d'authentification. Il gère l'utilisateur comptes, groupes, autorisations et sessions utilisateur basées sur des cookies. Ce Le document explique comment les choses fonctionnent.

Comment changer les mots de passe Django

Voir la section Changer les mots de passe

  1. Navigation vers votre projet où se trouve le fichier manage.py

  2. $ python manage.py Shell

  3. tapez ci-dessous les scripts:

 de Django.contrib.auth.models import User 
 u = User.objects.get (username__exact = 'john') 
 u.set_password ('nouveau mot de passe') 
 u.save () 

Vous pouvez également utiliser la simple commande manage.py:

manage.py changepassword *username*

Il suffit d'entrer le nouveau mot de passe deux fois.

depuis la section changement de mots de passe dans la documentation.


Si vous avez le Django.contrib.admin dans votre INSTALLED_APPS, vous pouvez visiter: example.com/path-to-admin/password_change/ qui aura un formulaire pour confirmer votre ancien mot de passe et entrez le nouveau mot de passe deux fois.

132
Svetlozar Angelov

Vous pouvez également simplement utiliser la vue Django.contrib.auth.views.password_change dans votre URLconf. Il utilise un formulaire et un modèle par défaut. fournir votre propre est facultatif.

22
Ben James

C'est sans avoir besoin d'aller à Shell, entrez passwd et entrez à nouveau passwd

 python manage.py changepassword <username> 
  or
/manage.py changepassword <username>

Utiliser 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()
3
Mr Singh

urls.py:

urlpatterns = [
    url(r'^accounts/', include('Django.contrib.auth.urls')),

Modèle:

<a href="{% url 'password_change' %}">{% trans "Change password" %}</a>

Documenté à: https://docs.djangoproject.com/fr/1.9/topics/auth/default/#using-the-views

Ce tutoriel montre comment procéder avec des vues basées sur les fonctions:

Voir la fiche:

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

Fichier URL:

from Django.conf.urls import url
from myproject.accounts import views

urlpatterns = [
    url(r'^password/$', views.change_password, name='change_password'),
]

Et enfin, le modèle:

<form method="post">
  {% csrf_token %}
  {{ form }}
  <button type="submit">Save changes</button>
</form>
1
yam

Très similaire à la réponse de @ Ciro, mais plus spécifique à la question initiale (sans ajouter toutes les vues d'authentification):

ajoutez simplement urlpatterns dans urls.py:

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

Notez que post_change_redirect spécifie l'URL à rediriger après le changement du mot de passe.

Ensuite, ajoutez simplement à votre modèle:

<a href="{% url 'password_change' %}">Change Password</a>
0
Pablo Guerrero

C’est la commande que j’ai utilisée, juste au cas où vous auriez un problème avec ce 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()"
0
ji-ruh

Une fois le modèle d'URL ajouté, comme indiqué dans la réponse de Ciro Santilli, un moyen rapide de permettre aux utilisateurs de modifier les mots de passe consiste à leur donner un "accès personnel" pour les fonctions d'administration. Si vous ne les ajoutez à aucun groupe et ne leur accordez pas d'autorisations spéciales, ils peuvent toujours modifier leur mot de passe en accédant à la page example.com/admin. L'accès au personnel leur permet d'accéder à la page même si elle est vide. dans le coin supérieur droit, ils peuvent cliquer sur "changer le mot de passe" et utiliser la fonctionnalité admin.

0
ds58