Dies ist meine erste Verwendung von SetPasswordForm. Das Formular ist nicht gültig, zeigt jedoch keine Fehlermeldung an. Es fällt mir also schwer, herauszufinden, welcher Teil schief gelaufen ist.django: SetPasswordForm ist nicht ohne Fehler gültig
urls.py
url(r'^password_change/(?P<username>[-\w.]+)/$', views.password_change, name='password_change'),
url(r'^password_change_done/$', views.password_change_done, name='password_change_done'),
Wenn Benutzereingaben ihr neues Passwort ein und wenn die Aktion erfolgreich war, wird die Seite password_change_done umleiten.
views.py
@login_required
def password_change(request, username):
if request.method == 'POST':
form = PasswordChangeForm(data=request.POST, user=request.user)
if form.is_valid():
oldpassword = form.cleaned_data.get('oldpassword')
password1 = form.cleaned_data.get('password1')
password2 = form.cleaned_data.get('password2')
if password1 == password2:
update_session_auth_hash(request, form.username)
form.save()
return HttpResponseRedirect('/blog/password_change_done/')
else:
return render(request, 'blog/profile.html', {'error_message': 'password mismatch'})
else:
return render(request, 'blog/profile.html', {'error_messages': form.errors })
else:
return redirect(reverse('blog:profile', args=[form.user.get_username()]))
@login_required
def password_change_done(request):
return render(request, 'blog/password_change_done.html')
forms.py
class PasswordChangeForm(SetPasswordForm):
error_messages = dict(SetPasswordForm.error_messages, **{
'password_incorrect': ("Your old password was entered incorrectly. Please enter it again."),
})
oldpassword = forms.CharField(
label=("Old password"),
strip=False,
widget=forms.PasswordInput(attrs={'autofocus': True}),
)
field_order = ['oldpassword', 'password1', 'password2']
def __init__(self, user, data, **kwargs):
self.user = user
super(PasswordChangeForm, self).__init__(data, **kwargs)
def clean_oldpassword(self):
oldpassword = self.cleaned_data["oldpassword"]
if not self.user.check_password(oldpassword):
raise forms.ValidationError(
self.error_messages['password_incorrect'],
code='password_incorrect',
)
return oldpassword
templates.py
{{ form.errors }}
{{ form.non_field_errors }}
{% if error_message %}
<h2><strong>{{ error_message }}</strong></h2>
{% else %}<br>
{% endif %}
<form class="form-horizontal" role="form" action="{% url 'blog:password_change' user.username %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="button-primary">submit</button></div>
</form>
Ich habe {{form.errors}} und {{form.non_field_errors} } Wenn ein Fehler auftritt, kann die Fehlermeldung auf der Website angezeigt werden. Bis jetzt wurde jedoch keine Nachricht angezeigt und es scheint so, als ob nichts passiert, wenn der Benutzer auf die Senden-Schaltfläche klickt.
Wie stellen Sie fest, dass das Formular nicht gültig ist? Beachten Sie auch, dass Sie den Passwort-Vergleich innerhalb der 'clean'-Methode des Formulars durchführen sollten. Auf diese Weise können Sie einen Formularfehler und nicht eine separate Variable zurückgeben. –
können Sie versuchen, drucken (form.is_valid()) in Ihrer Sicht nach der Erstellung des Formulars? –
@DanielRoseman Ich drucke unter Formular ist Vaild() und sonst, und nur dort, wo ich in den sonst Teil in der Konsole zeigt, und das Passwort war Thae Smae, so dass ich vermutete, dass das Formular nicht gültig ist – camila