Python-修改密码功能

修改密码
在这里插入图片描述在这里插入图片描述
使用forms表单验证方式:

forms.py

class ChangePasswordForm(forms.Form):
    old_password = forms.CharField(max_length=20, min_length=8, required=True, error_messages={
    
    "max_length": "用户长度最长为20", "min_length": "用户名最少长度为8", "required": "密码必填"})
    new_password = forms.CharField(max_length=20, min_length=8, required=True, error_messages={
    
    "max_length": "用户长度最长为20", "min_length": "用户名最少长度为8", "required": "密码必填"})
    new_password2 = forms.CharField(max_length=20, min_length=8, required=True, error_messages={
    
    "max_length": "用户长度最长为20", "min_length": "用户名最少长度为8", "required": "密码必填"})

    def clean(self):
        cleaned_data = super().clean()
        old_password = cleaned_data.get('old_password')
        new_password = cleaned_data.get('new_password')
        new_password2 = cleaned_data.get('new_password2')


        if old_password == new_password:
            raise forms.ValidationError('新旧密码不允许相同')

        if new_password != new_password2:
            raise forms.ValidationError('两次密码输入不一致')
        return cleaned_data

views.py

class ChangePasswordView(View):
    """修改密码"""
    def get(self, request):
        '''展示修改密码界面'''
        return render(request, 'user_center_pass.html')

    def post(self, request):
        '''实现修改密码逻辑'''

            # 接收参数
        ChangePassword_form = ChangePasswordForm(request.POST)

        if ChangePassword_form.is_valid():
            old_password = ChangePassword_form.cleaned_data.get('old_password')
            new_password = ChangePassword_form.cleaned_data.get('new_password')
            new_password2 = ChangePassword_form.cleaned_data.get('new_password2')

            # 校验参数
            if not all([old_password, new_password, new_password2]):
                return http.HttpResponseForbidden('缺少必传参数')
            try:
                result = request.user.check_password(old_password)
                if not result:
                    return render(request, 'user_center_pass.html', {
    
    'origin_password_errmsg': '原始密码错误'})
            except Exception as e:
                logger.error(e)
                return render(request, 'user_center_pass.html', {
    
    'origin_password_errmsg': '原始密码错误'})

            if not re.match(r'^[0-9A-Za-z]{8,20}$', new_password):
                return http.HttpResponseForbidden('密码最少8位,最多20位')
            if new_password != new_password2:
                return http.HttpResponseForbidden('两次输入的密码不一致')

            # 修改秘密
            try:
                request.user.set_password(new_password)
                request.user.save()
            except Exception as e:
                logger.error(e)
                return render(request, 'user_center_pass.html', {
    
    'change_pwd_errmsg': '修改密码失败'})

            # 清理状态保持信息
            logout(request)
            response = redirect(reverse('users:login'))
            response.delete_cookie('username')

            # 响应密码修改结果:重定向到登录界面
            return response

不使用forms表单验证方式:POST.get

class ChangePasswordView(LoginRequiredMixin, View):
    """修改密码"""

    def get(self, request):
        """展示修改密码界面"""
        return render(request, 'user_center_pass.html')

    def post(self, request):
        """实现修改密码逻辑"""
        # 接收参数
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        new_password2 = request.POST.get('new_password2')

        # 校验参数
        if not all([old_password, new_password, new_password2]):
            return http.HttpResponseForbidden('缺少必传参数')
        try:
            result = request.user.check_password(old_password)
                if not result:
                    return render(request, 'user_center_pass.html', {
    
    'origin_password_errmsg': '原始密码错误'})
        except Exception as e:
            logger.error(e)
            return render(request, 'user_center_pass.html', {
    
    'origin_pwd_errmsg':'原始密码错误'})
        if not re.match(r'^[0-9A-Za-z]{8,20}$', new_password):
            return http.HttpResponseForbidden('密码最少8位,最长20位')
        if new_password != new_password2:
            return http.HttpResponseForbidden('两次输入的密码不一致')

        # 修改密码
        try:
            request.user.set_password(new_password)
            request.user.save()
        except Exception as e:
            logger.error(e)
            return render(request, 'user_center_pass.html', {
    
    'change_pwd_errmsg': '修改密码失败'})

        # 清理状态保持信息
        logout(request)
        response = redirect(reverse('users:login'))
        response.delete_cookie('username')

        # # 响应密码修改结果:重定向到登录界面
        return response

猜你喜欢

转载自blog.csdn.net/weixin_45905671/article/details/114976956