如何让用户在Django中更改自己的密码?

时间:2009-12-09 13:15:50

标签: python django

任何人都可以指出用户可以在Django中更改自己密码的代码吗?

9 个答案:

答案 0 :(得分:136)

  

Django带有一个用户   认证系统。它处理用户   帐户,群组,权限和   基于cookie的用户会话。这个   文件解释了事情是如何运作的。

How to change Django passwords

请参阅更改密码部分

  1. 导航到manage.py文件所在的项目

  2. $ python manage.py shell

  3. 在脚本下面输入:

  4. from django.contrib.auth.models import User
    u = User.objects.get(username__exact='john')
    u.set_password('new password')
    u.save()
    

    您还可以使用简单的manage.py命令:

    manage.py changepassword *username*

    只需输入两次新密码即可。

    来自文档中的Changing passwords部分。


    如果您django.contrib.admin中有INSTALLED_APPS,则可以访问:example.com/path-to-admin/password_change/,其中包含确认旧密码的表单并输入两次新密码。

答案 1 :(得分:22)

您也可以在URLconf中使用django.contrib.auth.views.password_change视图。它使用默认表单和模板;提供你自己的是可选的。

答案 2 :(得分:4)

无需转到shell输入passwd并重新输入passwd

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

使用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 :(得分:2)

urls.py

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

模板:

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

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

答案 4 :(得分:1)

This tutorial显示了如何使用基于功能的视图执行此操作:

查看文件:

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

网址文件:

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

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

最后,模板:

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

答案 5 :(得分:1)

the documentation,使用:

from django.contrib.auth.hashers import makepassword

这样做的主要原因是Django使用哈希密码存储在数据库中。

password=make_password(password,hasher='default')
obj=User.objects.filter(empid=emp_id).update(username=username,password=password)

我将这种技术用于自AbstractUser模型派生的自定义用户模型。很抱歉,如果我在技术上错误地拼写了该类和子类,但是该技术效果很好。

答案 6 :(得分:0)

非常类似于@Ciro的答案,但更具体的原始问题(不添加所有身份验证视图):

只需添加到urlpatterns中的urls.py

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

请注意,post_change_redirect指定更改密码后重定向的网址。

然后,只需添加到您的模板:

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

答案 7 :(得分:0)

一旦添加了url模式,如Ciro Santilli的答案所示,允许用户更改密码的快捷方法是为管理员功能提供“员工访问权限”。如果您不将它们添加到任何组或授予他们特殊权限,他们仍然可以通过访问example.com/admin页面来更改其密码。员工访问权限允许他们进入页面,即使它是空白的;在右上角,他们可以点击“更改密码”并使用管理员功能。

答案 8 :(得分:0)

这是我使用的命令,以防万一你在抛出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()"