gpt4 book ai didi

python - view.py 中的 Django PasswordChangeForm 不工作

转载 作者:行者123 更新时间:2023-12-05 06:31:41 27 4
gpt4 key购买 nike

我正在尝试使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com