from django import forms
from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.exceptions import ValidationError
from blog.models import *
class RegisterForm(Form):
# 自定义form组件
username = fields.CharField(
label='用户名',
widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': "请输入用户名"}),
required=True,
max_length=32,
strip=True,
error_messages={
'required':'用户名不能为空',
'max_length':'用户名最大长度为32',
}
)
email = fields.EmailField(
label='邮箱',
widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': "请输入邮箱"}),
required=True,
error_messages={
'required': '邮箱不能为空',
'invalid': '邮箱格式错误',
}
)
password = forms.RegexField(
label='密码',
# regex='^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%\^\&\*\(\)])[0-9a-zA-Z!@#$\%\^\&\*\(\)]{8,32}$',
# regex='^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,32}$',
regex='^[0-9A-Za-z]{6,32}$',
min_length=6,
max_length=32,
required=True,
widget=widgets.PasswordInput(attrs={'class': 'form-control', 'placeholder': "请输入密码"}),
error_messages={'required': '密码不能为空.',
'invalid': '密码必须包含数字,字母、特殊字符',
'min_length': '密码长度不能小于6个字符',
'max_length': '密码长度不能大于32个字符',
}
)
confirm_pwd = fields.CharField(
label='确认密码',
widget=widgets.PasswordInput(attrs={'class': 'form-control', 'placeholder': "请再次输入密码"}),
required=True,
min_length=6,
max_length=32,
error_messages={'required': '密码不能为空.',
'min_length': "密码长度不能小于6个字符",
'max_length': "密码长度不能大于32个字符"}
)
# check_code = fields.CharField(
# widget=widgets.TextInput(attrs={'class': 'form-control', 'placeholder': "请输入验证码"}),
# required=True,
# error_messages={'required': '验证码不能为空.', }
# )
def clean_username(self):
v = self.cleaned_data.get('username')
if UserInfo.objects.filter(username=v).count():
raise ValidationError('用户名已存在')
else:
return v
def clean_email(self):
v = self.cleaned_data.get('email')
if UserInfo.objects.filter(email=v).count():
raise ValidationError('邮箱已存在')
else:
return v
def clean(self):
v1 = self.cleaned_data.get('password')
v2 = self.cleaned_data.get('confirm_pwd')
if v1 == v2:
pass
else:
raise ValidationError('密码输入不一致')