谁能指出我可以在Django中更改用户密码的代码?
谁能指出我可以在Django中更改用户密码的代码?
Answers:
Django随附了一个用户身份验证系统。它处理用户帐户,组,权限和基于cookie的用户会话。本文档说明了工作原理。
请参阅更改密码部分
导航到manage.py
文件所在的项目
$ python manage.py shell
在脚本下面输入:
从django.contrib.auth.models导入用户 u = User.objects.get(username__exact ='john') u.set_password('新密码') u.save()
您还可以使用简单的manage.py
命令:
manage.py changepassword *username*
只需输入两次新密码即可。
从文档的更改密码部分中。
如果你有django.contrib.admin
你的INSTALLED_APPS
,你可以访问:example.com/path-to-admin/password_change/
这将有一个表格,以确认您的旧密码,然后输入两次新密码。
它无需进入shell即可输入passwd并重新输入passwd
python manage.py changepassword <username>
or
/manage.py changepassword <username>
使用外壳
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')),
模板:
<a href="{% url 'password_change' %}">{% trans "Change password" %}</a>
记录在:https : //docs.djangoproject.com/en/1.9/topics/auth/default/#using-the-views
本教程展示了如何使用基于函数的视图来实现:
查看文件:
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>
这是我使用的命令,以防万一您在该投掷中遇到问题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()"
根据文档,使用:
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
模型派生的自定义用户模型。如果我在技术上拼写了该类和子类,我感到很抱歉,但是该技术效果很好。
与@Ciro的答案非常相似,但更特定于原始问题(不添加所有身份验证视图):
只需添加到urlpatterns
在urls.py
:
url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'),
注意 post_change_redirect
指定更改密码后要重定向的URL。
然后,只需将其添加到模板中:
<a href="{% url 'password_change' %}">Change Password</a>