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

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

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

使用Django的ModelForm对表单进行自动验证(可自定义验证规则)_第1张图片


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对表单进行自动验证(可自定义验证规则)_第2张图片

正确时浏览器提示

使用Django的ModelForm对表单进行自动验证(可自定义验证规则)_第3张图片

你可能感兴趣的:(django)