Python / Django - Установить новый пароль - PullRequest
0 голосов
/ 06 декабря 2018

Я новичок в django и получил проблему с изменением пароля, я не получил никаких ошибок, но новый пароль тоже не сохраняет и не перенаправляет меня?

Вот мой form.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)

Лика Я сказал, никаких ошибок вообще нет, но ничего не происходит, просто обновляется страница.Можно вставить что угодно, не сказав, что это неправильно.

Да, я использую пользовательскую модель пользователя, если это поможет ...

Извините за плохой английский, но я надеюсь, что вы его получите.Все вопросы помощи <3 </p>

...