0

パスワードを知っていてログインできるが、パスワードを変更したいというユーザーのために、パスワード変更フォームを作成しようとしています。フォームなどを作成しましたが、NoneType オブジェクトであると表示されているため、ユーザー オブジェクトがフォームに渡されていないようです。

#forms.py
class ChangePasswordForm(forms.Form):
    error_messages = {
        'wrong_current': _("You did not enter the right password!"),
        'invalid_new': _("You have entered an invalid new password or you did not enter one!"),
        'no_match': _("The new passwords do not match!")
    }
    current_password = forms.CharField(widget=forms.PasswordInput)
    new_password1 = forms.CharField(widget=forms.PasswordInput, label="New Password: ")
    new_password2 = forms.CharField(widget=forms.PasswordInput, label="Repeat New Password: ")

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        print self.user
        super(ChangePasswordForm, self).__init__(*args, **kwargs)

    def clean(self):
        try:
            a = u.objects.get(username__iexact=self.user)
        except u.DoesNotExist:
            pass
        if self.cleaned_data['new_password1'] != self.cleaned_data['new_password2']:
            raise forms.ValidationError(self.error_messages['no_match'])
        if a.check_password(self.cleaned_data["current_password"]) == "False":
            raise forms.ValidationError(self.error_messages["wrong_current"])
        return self.cleaned_data
#views.py
def change_pass_view(request):
    if request.method =="POST":
        form = ChangePasswordForm(request.POST)
        if form.is_valid():
            user = u.objects.get(username__iexact=request.user)
            user.set_password(form.cleaned_data["new_password1"])
            user.save()
        else:
            print "invalid"
            a = request.user
            a = u.objects.get(username__iexact=a)
            form = UserModificationForm(instance=a)
            form2 = ChangeEmailForm()
            form3 = ChangePasswordForm(user=request.user)
            return render(request, 'accounts/modify.html', {'form': form, 'form2': form2, 'form3': form3, 'usr':request.user, 'email':request.user.email})
    else:
        return redirect('/')    

私は大いに助けが必要です!

4

1 に答える 1

0

私は答えを見つけました。私は、django で必要なフォームが既に作成されていることを知りませんでした。今では完全に機能します。

于 2013-08-21T22:11:20.577 に答える