使用Django的ModelForm对表单进行自动验证(可自定义验证规则)
程序员文章站
2022-04-04 10:41:50
...
通过ModelForm可以直接验证用户键入是否符合model的设计,
但是model设计只能验证手机号码的长度, 无法验证手机号码是否合法.
这时我们就可以自己设计添加验证规则
例如:
某一在线学习网站上, 用户咨询记录表单有三个字段 如下:
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>
填写错误的效果
正确时浏览器提示
下一篇: iOS直角矩形图片绘制