1

ユーザーが情報を更新してパスワードを変更するためのページを作成しようとしています。

私は今それを働いています。私が提供したコードは機能しますが、間違ったパスワードを入力したことをユーザーに伝える方法がわかりません。ユーザーがパスワードを入力した場合、フォームは有効ですが、間違ったパスワードを入力した場合、フォームは無効であると言いたいです。しかし、forms.ValidationError("some error msg") を else stmt に入れると、現在は forms.errors と表示されますが、テンプレートには戻りませんが、コンパイラのメッセージ ページにエラー メッセージが表示されます。

これは django.contrib.auth.models import User からの私のものです

def edit_page(request):

u = request.user

if request.method == 'POST':

    form = EditUserForm(request.POST)

    if form.is_valid():

        if u.check_password(form.cleaned_data['oldPassword']):

            u.set_password(form.cleaned_data['password1'])

            u.save()

            return HttpResponseRedirect('/')    

        else:

            form.errors //Where I put forms.ValidationError()   

else:

    form = EditUserForm()

variables = RequestContext(request, {

    'form': form, 'user': request.user

})      

return render_to_response(

    'registration/Edit_User.html',

    variables

)

これは私のforms.pyclassにあります

EditUserForm(forms.Form):

oldPassword = forms.CharField(
    label=u'Current Password',
    widget = forms.PasswordInput()
)   
password1 = forms.CharField(
    label=u'New Password',
    widget=forms.PasswordInput()
)
password2 = forms.CharField(
    label=u'New Password (Again)',
    widget=forms.PasswordInput()
)

def clean_password2(self):
    if 'password1' in self.cleaned_data:
        password1 = self.cleaned_data['password1']
        password2 = self.cleaned_data['password2']
        if password1 == password2:
            return password2
    raise forms.ValidationError('Passwords do not match.')
4

1 に答える 1

0

問題はあなたのclean_oldPassword方法にあります。check_password変数の代わりに文字列「oldPassword」を呼び出すため、当然失敗します。

また、テンプレートが表示されていることを確認してform.errors、検証されない理由を確認する必要があります。

于 2011-04-07T07:24:55.227 に答える