简体   繁体   English

view.py中的Django PasswordChangeForm无法正常工作

[英]Django PasswordChangeForm in view.py not working

I'm trying to implement the change-password functionality using Django, but it's not working. 我正在尝试使用Django实现更改密码功能,但是无法正常工作。 Seems like it always render a new form without going into the form_valid statement, without giving any error informations also. 似乎它总是在不提交form_valid语句的情况下呈现新表单,也没有给出任何错误信息。

Here is my code in my views.py 这是我的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)

I'm wondering what I did wrong, please help me. 我想知道我做错了什么,请帮助我。 Thank you 谢谢

You need to make sure you redirect after the password change, and that there is a valid user session before the view is called. 您需要确保在更改密码后重定向,并且在调用视图之前存在有效的用户会话。

Try this version: 试试这个版本:

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})

You can also use the built-in PasswordChangeView , and just pass your custom template: 您还可以使用内置的PasswordChangeView ,只需传递自定义模板即可:

from django.contrib.auth.views import PasswordChangeView

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM