1.model定义user模型
from django.db import models
# Create your models here.
class User(models.Model):
username = models.CharField(max_length=30)
password = models.CharField(max_length=128)
class Meta:
db_table = 'user'
2.定义表单
from django import forms
# 注册表单 表单主要是针对html中表单提交的数据进行验证
class RegisterForm(forms.Form):
username = forms.CharField(label='用户名',min_length=3,required=True,
error_messages={'required':'用户名必须输入','min_length':'用户名长度不能小于3'}
)
password = forms.CharField(min_length=3,
required=True,
validators=[RegexValidator(regex=r'\d*$', message="密码不能是纯数字",code='password')], # 自定义验证函数
error_messages={'required':'密码必须输入','min_length':'密码长度必须大于3'}
)
confirm_password = forms.CharField(min_length=3,
required=True,
error_messages={'required': '密码必须输入', 'min_length': '密码长度必须大于3'}
)
email = forms.EmailField(error_messages={'invalid':'邮箱格式不正确'})
# 单个字段的验证方法
# 方法的名称格式:clean_字段名()
def clean_username(self):
# 获取用户名
username = self.cleaned_data.get('username')
# 查询数据库
# 如果存在
if User.objects.filter(username=username).first():
raise ValidationError("用户名重复")
# 必须把正确数据返回
return username
# 全局验证,涉及多个字段
def clean(self):
password = self.cleaned_data.get('password')
confirm_password = self.cleaned_data.get('confirm_password')
# 判断两者是否相等
if password != confirm_password:
raise ValidationError({'confirm_password':["两次密码输入不一致"]})
return self.cleaned_data
3.渲染页面
html页面,通过函数将form数据传过去
通过fom.字段名.erros 获取设置的错误提示信息
4.验证数据
def register(request):
if request.method == 'POST':
# 验证数据
#1 用提交过来的数据request.POST生成表单对象
form = RegisterForm(request.POST)
# 2 通过form的is_valid来检测数据是否合格,合格返回True,不合格返回False
if form.is_valid():
print(form.cleaned_data)
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = User(username=username,password=password)
user.save()
return HttpResponse("首页")
else:
return render(request, 'register.html', locals())
else:
return render(request,'register.html')