From和ModelForm
from django import forms from django.core.exceptions import ValidationError class RegForm(forms.ModelForm): password = forms.CharField(error_messages={'required': '这是必选项'}, widget=forms.PasswordInput(attrs={'placeholder': '密码', 'type': 'password'}), label='密码', min_length=6) re_pwd = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '确认密码', 'type': 'password'}), label='确认密码', min_length=6) class Meta: model = models.User fields = "__all__" # 所有字段 exclude = ['last_time'] # 排除这个字段 # labels={ # 'username':'用户名' # } widgets = { 'username': forms.TextInput(attrs={'placeholder': '用户名'}), 'position': forms.TextInput(attrs={'placeholder': '职位'}), # 'company': forms.TextInput(attrs={'placeholder':'公司'}), 'phone': forms.TextInput(attrs={'placeholder': '手机'}), # 显示提示信息 } error_messages = { 'username': { 'required': '必填项', }, 'password': { 'required': '必填项', }, } def clean_phone(self): import re phone = self.cleaned_data.get('phone') if re.match(r'^1[3-9]\d{9}$', phone): return phone raise ValidationError('手机号格式不准确') def clean(self): self._validate_unique = True # 数据库校验唯一 password = self.cleaned_data.get('password', '') re_pwd = self.cleaned_data.get('re_pwd') if password == re_pwd: md5 = hashlib.md5() md5.update(password.encode('utf-8')) print(md5.hexdigest()) self.cleaned_data['password'] = md5.hexdigest() return self.cleaned_data self.add_error('re_pwd', '两次密码不一致!!') raise ValidationError('两次密码不一致') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 自定义的操作 field = self.fields['company'] # print(field) # print(field.choices) choices = field.choices choices[0] = ('', '选择公司') field.choices = choices def register(request): form_obj = RegForm() # 实例化对象 if request.method == 'POST': form_obj = RegForm(request.POST) if form_obj.is_valid(): # 注册成功 form_obj.save() # print(request.POST) # print(form_obj.cleaned_data) # form_obj.cleaned_data.pop('re_pwd') # print(form_obj.cleaned_data) # models.User.objects.create(**form_obj.cleaned_data) return redirect('login') return render(request, 'register.html', {'form_obj': form_obj})