我正在为我的登录和注册视图和模板使用 django all auth,但我也想实现更改密码功能,所以默认情况下它有一个password_change.html
我们可以使用的模板,但我想要一个自定义设计,而不想要通过使用内置allauth
密码更改视图刷新页面,因此决定ChangePasswordForm
通过在我的视图中导入它来仅使用 allauth 的形式。
我正在使用 ajax 将请求发布到 aurl(view)
并返回 a Json Response
,以便我可以在自定义模板中使用 jquery/ajax 中的响应。
视图.py
from allauth.account.forms import ChangePasswordForm
@login_required
def change_password(request):
form = ChangePasswordForm(data=request.POST)
if form.is_valid():
form.save()
result = {'status':'done'}
else:
result = {'status':'undone', 'form_errors':form.errors}
json_data = json.dumps(result)
return HttpResponse(json_data, 'application/json')
模板.html
$('.form').click(function(){
$.ajax({
type: "POST",
url: '/change_password/',
data: form_data,
success: function(response)
{
if(response.status === 'done')
console.log('great====>');
......
.....
}
});
});
我正在单独渲染模板中的字段,就像form.oldpassword, form.newpassword, ....
错误一样。
因此,当我在没有任何数据的情况下提交表单时,我会收到正确的错误消息this fields are required
,但是当我只输入一个字段oldpassword
并提交表单时,我会收到以下错误
File "/home/user/Envs/proj/local/lib/python2.7/site-packages/django/forms/forms.py", line 290, in _clean_fields
value = getattr(self, 'clean_%s' % name)()
File "/home/user/Envs/proj/local/lib/python2.7/site-packages/allauth/account/forms.py", line 334, in clean_oldpassword
if not self.user.check_password(self.cleaned_data.get("oldpassword")):
AttributeError: 'NoneType' object has no attribute 'check_password'
因此,在调试后,我检查了self.user
allauth forms.py 中 ChangePasswordForm 类下 clean_oldpassword 验证方法中的值None
,所以实际上我遇到了上述错误?
在使用 django allauth ChangePasswordForm 时,为什么实际上用户没有?
使用时我做错了什么ChangePasswordForm Form
吗?