我是django的新手,但更改密码时遇到问题,我没有出现任何错误,但是新密码无法保存,也不能重定向我吗?
这是我的表格。py:
from django import forms
from django.contrib.auth import get_user_model
from django.db.models import Q
class NewPasswordForm(forms.Form):
error_messages = {
'old_password' : ("Your old password was entered incorrectly, Please enter it again"),
'password_mismatch' : ("The two password fields didn't match"),
}
old_password = forms.CharField(label='Current Password', widget=forms.PasswordInput)
new_password1 = forms.CharField(label='New Password', widget=forms.PasswordInput)
new_password2 = forms.CharField(label='Confirm New Password', widget=forms.PasswordInput)
field_order = ['old_password', 'new_password1', 'new_password2']
def __init__(self, user, *args, **kwargs):
self.user = user
super().__init__(*args, **kwargs)
def clean_old_passpord(self):
# Validate that the old_password field is correct.
if not self.user.check_password(old_password):
raise forms.ValidationError(
self.error_messages['old_password'],
code = 'old_password'
)
return old_password
def clean_new_password2(self):
old_password = self.cleaned_data.get('old_password')
password1 = self.cleaned_data.get('new_password1')
password2 = self.cleaned_data.get('new_password2')
if password1 and password2 and password1 != password2:
if password1 == old_password:
raise ValidationError(
self.error_messages['password_mismatch'],
code = 'password_mismatch'
)
return password2
def save(self, commit=True):
password = self.cleaned_data["new_password1"]
self.user.set_password(password)
if commit:
self.user.save()
return self.user
这是我的view.py:
from django.shortcuts import render, redirect
from .forms import NewPasswordForm
from .models import User
from django.contrib.auth import authenticate, login, logout, update_session_auth_hash
#Don't forget login_required
def user_change_password_view(request):
form = NewPasswordForm(request.POST or None)
if request.method == 'POST':
if form.is_valid():
password = form.cleaned_data.get('new_password1')
user = form.save()
update_session_auth_hash(self.request, form.user)
return redirect(home_view) # Redirect to a success page
else:
form = NewPasswordForm(request.POST or None)
template = 'change_password.html'
context = {
'form' : form
}
return render(request, template, context)
Lika我说过,完全没有错误,但是什么也没有发生,它只是刷新页面。 可以放任何东西而不必说错。
是的,如果有任何帮助,我会使用自定义用户模型...
对不起,英语不好,但我希望你能理解。所有帮助事项<3