一、django自带框架进行数据校验:form
1.例如:我们先建一个student的表,moduels.py:
class Student(models.Model): name = models.CharField(verbose_name='名称',max_length=10) phone = models.CharField(max_length=11,unique=True,verbose_name='手机号') money = models.FloatField(verbose_name='钱',default=0,null=True) class Meta: verbose_name = '学生表' verbose_name_plural = verbose_name db_table = 'student' def __str__(self): return self.name
2.字段校验,forms.CharField可以通过,定义的属性来检验数据,也可以自定义函数,def clean_字段名:来自定义校验函数,解释及代码如下,views.py:
from django import forms from django.core.exceptions import ValidationError class StudentForm(forms.Form): #需要继承form的类来校验 name=forms.CharField(min_length=2,max_length=10,required=True) #根据字段定义的属性 来校验前端输入的内容是否符合这些限制,required=True表示必传 phone=forms.CharField(min_length=11,max_length=11) money=forms.FloatField(required=False) #非必填:required=False,null=True:更改表结构,可为空 def clean_phone(self): #自定义校验函数,比如校验字段值重复。def clean_需要校验的字段名,固定格式。这里是校验了phone这个字段,这样在校验了上边写的字段属性外,还会校验这个函数。
'''钩子'''
phone=self.cleaned_data['phone'] if models.Student.objects.filter(phone=phone):#在form的基础上增加校验, raise ValidationError("手机号已经存在") #django校验异常 # return self.errors.add('手机号错误','手机号已经存在') return phone
3.把前端传来的数据,校验后,写进数据库,views.py
def student(request): stu_form=StudentForm(request.POST) #request.POST拿到前端传的数据 if stu_form.is_valid(): #根据实例的类中的属性 判断是否符合条件。is_valid()是自动校验字段是否符合限制的方法,符合限制返回True,不符合限制返回False cleand_data=stu_form.cleaned_data #stu_form.cleaned_data,获取校验通过的数据,字典类型 models.Student.objects.create(**cleand_data) #插入已经校验通过的数据,通过解包字典转换成key=value的方式 data={'msg':'成功'} else: print(stu_form.errors.get_json_data) #获取错误信息,返回不符合限制的字段是哪些,以及不符合的原因。stu_form.errors返回的是html的。通过get_json_data返回字典类型 data={'msg':'校验失败'} return HttpResponse(json.dumps(cleand_data,ensure_ascii=False)) #返回字符串用httpresponse返回