from django.forms import fields as c_fields
from django import forms as c_forms
from django.core.exceptions import ValidationError


class CheckForm(c_forms.Form):
    new_password = c_fields.RegexField(
        '(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,30}',
        # 密码必须同时包含大写、小写、数字和特殊字符其中三项且至少8位
        strip=True,
        min_length=8,
        max_length=30,
        error_messages={'required': '新密码不能为空.',
                        'invalid': '密码必须包含数字，字母、特殊字符',
                        'min_length': "密码长度不能小于8个字符",
                        'max_length': "密码长度不能大于30个字符"}
    )
    old_password = c_fields.CharField(error_messages={'required': '确认密码不能为空'})
    ensure_password = c_fields.CharField(error_messages={'required': '确认密码不能为空'})
    username = c_fields.CharField(error_messages={'required': '账号不能为空', 'invalid': '账号格式错误'})

    def clean(self):
        pwd0 = self.cleaned_data.get('old_password')
        pwd1 = self.cleaned_data.get('new_password')
        pwd2 = self.cleaned_data.get('ensure_password')
        if pwd1 == pwd2:
            pass
        elif pwd0 == pwd1:
            # 这里异常模块导入要放在函数里面，放到文件开头有时会报错，找不到
            from django.core.exceptions import ValidationError
            raise ValidationError('新旧密码不能一样')
        else:
            from django.core.exceptions import ValidationError
            raise ValidationError('新密码和确认密码输入不一致')
