Django密码重置页面报错__init__() got an unexpected keyword argument 'user'如何解决
问题原因
错误核心是PasswordResetConfirmView会向绑定的表单类传入user关键字参数,但你当前自定义的CaptchaPasswordResetForm继承了PasswordResetForm——这个类是用于发送重置邮件的表单,不接收user参数,只有用于重置确认页修改密码的SetPasswordForm才支持接收user参数。
另外你表单里的字段写法存在冗余错误:forms.forms.CharField多写了一层forms,会导致字段定义异常。
修复方案
第一步:修改forms.py代码
把CaptchaPasswordResetForm的父类替换为SetPasswordForm,同时修正字段的冗余写法:
from django.contrib.auth.forms import SetPasswordForm from django import forms class CaptchaPasswordResetForm(SetPasswordForm): new_password1 = forms.CharField(max_length=100, widget=forms.PasswordInput(attrs={"class": "form-control", 'type':'password'})) new_password2 = forms.CharField(max_length=100, widget=forms.PasswordInput(attrs={"class": "form-control", 'type':'password'}))
第二步:清理冗余配置(可选)
你已经在自定义的password_reset_view类里指定了form_class = CaptchaPasswordResetForm,urls.py里对应password_reset_confirm路径的form_class参数可以删除,避免重复定义冲突,修改后路径配置如下:
path('reset/confirm/<uidb64>/<token>/', password_reset_view.as_view(template_name="home/password_reset_form.html"), name="password_reset_confirm"),
修改完成后重启服务即可正常访问密码重置确认页。
内容的提问来源于stack exchange,提问作者FLYAX
相关产品推荐
相关产品推荐

