Django的Forms校验

from django import forms
from django.forms import ModelForm
from auther.models import Userpro
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError


class UserProForm(ModelForm):
    enroll_time = forms.DateTimeField(label='注册日期',required=False)
    user = forms.IntegerField(label='用户',required=False)
    mail_code = forms.CharField(label='验证码',required=False)
    username = forms.CharField(label='用户名',min_length=5,max_length=8,error_messages={
            'min_length': '用户名最少5位',
            'max_length': '用户名最大8位',
            'required': '真实姓名不能为空',
        },
        validators=[RegexValidator(r'^[^\s]+$','用户名不能包含空格')]
    )

    mail = forms.CharField(label='邮箱',
        error_messages={
            'invalid': '邮箱格式不正确',
            "required": "该字段不能为空"
        },
        validators=[RegexValidator(r'^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4}$','邮箱验证失败!')]
    )

    ready_name = forms.CharField(label='真实姓名',min_length=2,max_length=32,error_messages={
            'min_length': '真实姓名最少2位',
            'max_length': '真实姓名最大8位',
            'required': '真实姓名不能为空',
        },
        validators=[RegexValidator(r'^[^\s]+$', '真实姓名不能包含空格')]
    )

    ver = forms.CharField(label='验证码',
        error_messages={
            'invalid': '验证码格式不正确',
            "required": "该字段不能为空"
        }
    )

    pwd = forms.CharField(label='密码',min_length=8,max_length=16,error_messages={
            'min_length': '密码最少8位',
            'max_length': '密码最大16位',
            'invalid': '密码格式不正确',
            "required": "该字段不能为空"
        },
        validators=[RegexValidator(r'^[^\s]+$', '密码不能包含空格')]
    )

    upwd = forms.CharField(label='重复密码',min_length=8,max_length=16,error_messages={
            'min_length': '确认密码最少8位',
            'max_length': '确认密码最大16位',
            'invalid': '重复密码格式不正确',
            "required": "该字段不能为空"
        },
        validators=[RegexValidator(r'^[^\s]+$', '确认密码不能包含空格')]
    )

    def clean_password(self):
        if self.cleaned_data.get('pwd').isdigit() or self.cleaned_data.get('upwd').isalpha():
            raise ValidationError('密码必须包含数字和字母')
        else:
            return self.cleaned_data['password']

    def clean(self):
        if self.cleaned_data.get('pwd') != self.cleaned_data.get('upwd'):
            raise ValidationError('密码不一致')
        else:
            return self.cleaned_data

    class Meta:
        model = Userpro
        fields = '__all__'

名称说明
label字段名
error_messages自定义报错信息[initial=‘yangyi’]
initial默认值
required控制字段是否必填[required=False]
min_length最小字段
max_lenght最大字段
validator正则
widget给标签添加一定的属性
  • Text
username = forms.CharField(
    min_length=3,
    max_length=8,
    label='用户名',
    # initial='yangyi',
    # required=False,
    error_messages={
        'min_length': '用户名最少3位',
        'max_length': '用户名最大8位',
        'required': "用户名不能为空"
    },
    widget=forms.widgets.TextInput(
        attrs={
            # 可以添加固有属性,也可以添加自定义属性 多个属性值的话,直接空格隔开即可
            'class': 'form-control c1 c2'
        }
    )
)
  • password
# password字符串类型最小3位最大8位
password = forms.CharField(
    min_length=3,
    max_length=8,
    label='密码',
    error_messages={
        'min_length': '密码最少3位',
        'max_length': '密码最大8位',
        'required': "密码不能为空"
    },
    widget=forms.widgets.PasswordInput(
        attrs={
            'class': 'form-control'
        }
    )
)

from django.core.validators import RegexValidator

# 确认密码
confirm_password = forms.CharField(
    min_length=3,
    max_length=8,
    label='密码',
    error_messages={
        'min_length': '密码最少3位',
        'max_length': '密码最大8位',
        'required': "密码不能为空"
    },
    widget=forms.widgets.PasswordInput(
        attrs={
            'class': 'form-control c1 c2'
        }
    ),
    # 第一道关卡里面还支持正则校验
    validators=[
        RegexValidator(r'^[0-9]+$', '请输入数字'),
        RegexValidator(r'^159[0-9]+$', '数字必须以159开头')
    ]
)
  • email
# email字段必须符合邮箱格式  xxx@xx.com
email = forms.EmailField(
    label='邮箱',
    error_messages={
        'invalid': '邮箱格式不正确',  # 邮箱的专属
        'required': "邮箱不能为空"
    },
    widget=forms.widgets.EmailInput(
        attrs={
            'class': 'form-control'
        }
    )
)
  • radio
gender = forms.ChoiceField(
        choices=((1, "男"), (2, "女"), (3, "保密")),
        label="性别",
        initial=3,
        widget=forms.widgets.RadioSelect()
)

  • 单选select
hobby = forms.ChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=3,
        widget=forms.widgets.Select()
    )

  • 多选select
hobby1 = forms.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.SelectMultiple()
    )

  • 单选checkbox
keep = forms.ChoiceField(
        label="是否记住密码",
        initial="checked",
        widget=forms.widgets.CheckboxInput()
    )

  • 多选checkbox
 hobby2 = forms.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.CheckboxSelectMultiple()
    )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值