Python / Django-设置新密码

时间:2018-12-06 13:50:21

标签: python django python-3.x django-forms django-views

我是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

0 个答案:

没有答案