django基础——使用django form校验数据

一、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)

    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
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,default=0,null=True)   #非必填:required=False,null=True:更改表结构,可为空
    def clean_phone(self):  #自定义校验函数,比如校验字段值重复。def clean_需要校验的字段名,固定格式。这里是校验了phone这个字段,这样在校验了上边写的字段属性的基础上,还会校验这个函数。
        phone=self.cleaned_data['phone']
        if models.Student.objects.filter(phone=phone):#在form的基础上增加校验,
           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返回

猜你喜欢

转载自www.cnblogs.com/hancece/p/11738381.html