欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Django的ModelForm对表单进行自动验证(可自定义验证规则)

程序员文章站 2022-04-04 10:41:50
...

通过ModelForm可以直接验证用户键入是否符合model的设计,
但是model设计只能验证手机号码的长度, 无法验证手机号码是否合法.
这时我们就可以自己设计添加验证规则

例如:
某一在线学习网站上, 用户咨询记录表单有三个字段 如下:

使用Django的ModelForm对表单进行自动验证(可自定义验证规则)


model设计如下:

class UserAsk(models.Model):
    name = models.CharField(verbose_name='姓名', max_length=20)
    mobile = models.CharField(verbose_name='手机', max_length=11)
    course_name = models.CharField(verbose_name='咨询课程', max_length=100)
    add_time = models.DateTimeField(verbose_name='添加时间', auto_now_add=True)

    class Meta:
        verbose_name = '用户咨询'
        verbose_name_plural = verbose_name

Form设计如下(自定义验证规则)

import re
from django import forms
from operation.models import UserAsk

class UserAskForm(forms.ModelForm):
    class Meta:
        model =UserAsk
        fields = ['name', 'mobile', 'course_name']

    def clean_mobile(self):  # 函数必须以clean_开头
        """
        通过正则表达式验证手机号码是否合法
        """
        mobile = self.cleaned_data['mobile']
        mobile_regex = r'^1[34578]\d{9}$'
        p = re.compile(mobile_regex)
        if p.match(mobile):
            return mobile
        else:
            raise forms.ValidationError('手机号码非法', code='invalid mobile')

View设计如下:

class UserAskView(View):
    def post(self, request):
        userask_form = UserAskForm(request.POST)
        if userask_form.is_valid():
            # ModelForm可以直接将表单数据提交到数据库并保存
            user_ask = userask_form.save(commit=True)
            return HttpResponse('{"status": "success"}', content_type='application/json')
        else:
            return HttpResponse('{"status": "failure", "msg": "格式错误"}', content_type='application/json')

template Ajax代码

<script>
    $(function(){
        $('#jsStayBtn').on('click', function(){
            $.ajax({
                cache: false,
                type: "POST",
                url:"{% url 'org:user_ask' %}",
                data:$('#jsStayForm').serialize(),
                async: true,
                success: function(data) {
                    if(data.status == 'success'){
                        $('#jsStayForm')[0].reset();
                        alert("提交成功")
                    }else if(data.status == 'failure'){
                        $('#jsCompanyTips').html(data.msg)
                    }
                }
            });
        });
    })
</script>

填写错误的效果

使用Django的ModelForm对表单进行自动验证(可自定义验证规则)

正确时浏览器提示

使用Django的ModelForm对表单进行自动验证(可自定义验证规则)