Я создал страницу, которая позволяет пользователю редактировать свою информацию о профиле.Обновление пароля Django не работает
Каждый раз, когда пользователь менял пароль, он не обновлял базу данных и несколько искажал пароль.
edit_user.html
<form style="display:inline"class="form-signin" action="/edit_user/" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-info"> Save Changes</button>
</form>
forms.py
class UserProfileForm(forms.Form):
email = forms.EmailField(label='Email', widget=forms.TextInput(attrs={'class' : 'form-control'}))
firstname = forms.CharField(label='First Name', max_length=15, widget=forms.TextInput(attrs={'class' : 'form-control'}))
lastname = forms.CharField(label='Last Name', max_length=15, widget=forms.TextInput(attrs={'class' : 'form-control'}))
#zip = forms.IntegerField(validators=[MinValueValidator(0),MaxValueValidator(99999)], label="Zipcode", widget=forms.TextInput(attrs={'class' : 'form-control'}))
oldPassword = forms.CharField(required=False, label='Current Password', widget=forms.PasswordInput(attrs={'class' : 'form-control'}))
password1 = forms.CharField(required=False, label="New Password", widget=forms.PasswordInput(attrs={'class' : 'form-control'}))
password2 = forms.CharField(required=False, label="Confirm New Password", widget=forms.PasswordInput(attrs={'class' : 'form-control'}))
def clean_password(self):
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError(_("The two password fields did not match."))
return self.cleaned_data
views.py
@login_required
def edit_user(request):
if '_auth_user_id' in request.session:
u = User.objects.get(id=request.session['_auth_user_id'])
if request.method == 'POST':
form = UserProfileForm(request.POST)
form.fields["email"].initial = u.email
form.fields["firstname"].initial = u.first_name
form.fields["lastname"].initial = u.last_name
if form.is_valid():
fname = form.cleaned_data['firstname']
lname = form.cleaned_data['lastname']
email = form.cleaned_data['email']
oldPassword = form.cleaned_data['oldPassword']
pword = form.cleaned_data['password1']
# if oldPassword != u.password:
# #"The current password does not match with your old password!"
# return render(request, 'edit_user.html', { 'form': form})
User.objects.filter(id=u.id).update(first_name = fname, last_name = lname, email = email, password = pword)
return HttpResponseRedirect('/edit_user/')
else:
form = UserProfileForm()
form.fields["email"].initial = u.email
form.fields["firstname"].initial = u.first_name
form.fields["lastname"].initial = u.last_name
variables = RequestContext(request, {'form': form})
return render(request, 'edit_user.html', variables,)
Когда я иду в настройках администратора, и проверьте пароль пользователя, он отображает это :
Password:
Invalid password format or unknown hashing algorithm.
Raw passwords are not stored, so there is no way to see this user's password, but you can change the password using this form.
Любая помощь будет замечательной!
Спасибо.
Он по-прежнему дает тот же «Недопустимый формат пароля или неизвестное хеширование ...» после добавления 'u.set_password (pword)' – user4234041
Вы удалили 'password = pword' из вызова' update'? – meshy
Вам также нужно будет вызвать 'u.save()' впоследствии. Я бы не рекомендовал использовать метод «update» вообще в этом представлении. – meshy