我正在尝试使用 Django 实现更改密码功能,但它不起作用。似乎它总是在不进入 form_valid 语句的情况下呈现一个新表单,也不提供任何错误信息。
这是我的 views.py 中的代码
def password_reset_by_user(request):
if request.method == 'POST':
form = PasswordChangeForm(user=request.user, data=request.POST)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
return render(request, 'check_success.html')
else:
form = PasswordChangeForm(user=request.user)
context = {'form': form, }
return render(request, 'user/reset_by_user.html', context)
我想知道我做错了什么,请帮助我。谢谢
最佳答案
您需要确保在密码更改后重定向,并且在调用 View 之前存在有效的用户 session 。
试试这个版本:
from django.contrib.shortcuts import redirect
from django.contrib.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth import update_session_auth_hash
@login_required
def password_reset_by_user(request):
form = PasswordChangeForm(user=request.user data=request.POST or None)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
return redirect('/')
return render(request, 'users/reset_by_user.html', {'form': form})
您还可以使用内置的 PasswordChangeView
,然后传递您的自定义模板:
from django.contrib.auth.views import PasswordChangeView
class PasswordResetByUser(PasswordChangeView):
template_name = 'users/reset_by_user.html'
success_url = '/'
关于python - view.py 中的 Django PasswordChangeForm 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699997/