![](/img/trans.png)
[英]builtins.AttributeError: 'NoneType' object has no attribute 'check_password'
[英]AttributeError: 'NoneType' object has no attribute 'check_password' error in django allauth
我正在使用django all auth作為我的登錄和注冊視圖和模板,但我也想實現更改密碼功能,因此默認情況下,它具有我們可以使用的模板password_change.html
,但我需要自定義設計,並且為了不希望通過使用內置的allauth
密碼更改視圖來刷新頁面,因此決定通過在我的視圖中導入allauth來僅使用ChangePasswordForm
形式的allauth。
我將使用ajax的請求發布到url(view)
並返回Json Response
,以便我可以在自定義模板的jquery / ajax中使用響應。
views.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')
templates.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'
因此,在調試之后,我在allauth表單的ChangePasswordForm類下的clean_oldpassword驗證方法中檢查了self.user
的值.py正在打印None
,所以實際上我正面臨上述錯誤?
使用django allauth ChangePasswordForm時,為什么實際上用戶為空?
使用ChangePasswordForm Form
時我做錯什么了嗎?
您需要將用戶對象傳遞給您的類:
form = ChangePasswordForm(data=request.POST, user=request.user)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.