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

标签 python django

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

相关文章:

python - 如何用python解析facebook api返回的字典字符串列表?

python - Tkinter - 如何改进 "grab_set()"方法行为?

python - 列出并下载具有 blob 级别 SAS token 的 blob 中的文件夹中的文件

python - python 中的 Split() 如果有条件必须跳过某些值,如何使用

python - 查询集 : LEFT JOIN with AND

python - Django Admin - 一对多 - 如何确保只有一个 child 选择了 boolean 字段

python - 在 Django 中抛出自定义异常时异常值字段为空

python - "Fatal: too many params"从 python 调用 bash 命令时,直接在 git bash 中使用相同命令没有错误

python - django-facebook 内部代码说找不到 facebook_id

python - Django "ValueError: embedded null byte"