Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python view.py中的Django PasswordChangeForm不工作_Python_Django - Fatal编程技术网

Python view.py中的Django PasswordChangeForm不工作

Python view.py中的Django PasswordChangeForm不工作,python,django,Python,Django,我试图使用Django实现更改密码功能,但它不起作用。似乎它总是呈现一个新表单,而不进入form\u有效语句,也不提供任何错误信息 这是我在my views.py中的代码 def password_reset_by_user(request): if request.method == 'POST': form = PasswordChangeForm(user=request.user, data=request.POST) if form.is_val

我试图使用Django实现更改密码功能,但它不起作用。似乎它总是呈现一个新表单,而不进入form\u有效语句,也不提供任何错误信息

这是我在my 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)

我想知道我做错了什么,请帮帮我。谢谢

您需要确保在更改密码后重定向,并且在调用视图之前存在有效的用户会话

请尝试以下版本:

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})
您也可以使用内置模板,只需传递自定义模板:

from django.contrib.auth.views import PasswordChangeView

class PasswordResetByUser(PasswordChangeView):
  template_name = 'users/reset_by_user.html'
  success_url = '/'

我从django.contrib.auth.forms导入了当表单的输入值无效时您没有处理的PasswordChangeForm。如果form.is_valid()需要一个else条件。您好,我尝试了您的版本,但仍然遇到相同的问题。该进程从未保存新密码或重定向,只是继续呈现重置页面。