1

ログインとサインアップのビューとテンプレートにdjangoのすべての認証を使用していますが、パスワードの変更機能も実装したいので、デフォルトでpassword_change.html使用できるテンプレートがありますが、カスタムデザインが必要で、それは必要ありません組み込みのallauthパスワード変更ビューを使用してページを更新するためChangePasswordForm、ビューにインポートして allauth の形式のみを使用することにしました。

カスタム テンプレートで jquery/ajax の応答を使用できるように、ajax を使用して にリクエストを投稿し、url(view)を返します。Json Response

ビュー.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、フィールドを1つだけ入力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ますか?

4

1 に答える 1

2

ユーザー オブジェクトをクラスに渡す必要があります。

form = ChangePasswordForm(data=request.POST, user=request.user)
于 2013-11-09T20:43:45.057 に答える