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})

 

posted @ 2020-09-22 10:59  叶青IT爱好者  阅读(48)  评论(0编辑  收藏  举报