簡體   English   中英

AttributeError:“ noneType”對象在Django allauth中沒有屬性“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM