十二、django之ModelForm数据校验

以下例子对数据库表Student进行操作

# models.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

ModelForm

1、定义一个校验的类,用来校验数据

#导入ModelForm模块,用于校验
from django.forms import ModelForm 

#继承ModelForm,对数据库Student进行校验
class StudentForm(ModelForm):
    class Meta:
        model = Student #数据库表名
        fields = '__all__' #代表所有的字段
        #fields = ['name','phone'] #某个字段
        #exclude = ['money'] #排查哪个字段

2、校验

from user.models import Student
from django.views import View
from django.core.paginator import Paginator
from django.http import HttpResponse,JsonResponse

class StudentView(View):
    def get(self,request): #获取列表
        #QuerySet
        limit = request.GET.get('limit',20) #一页多少条
        page = request.GET.get('page',1) #第几页
        # 这里不会查询出数据,在后面返回的时候才会查询
        # 所以查询出全部的数据,到返回的时候,返回具体页的值
        all_students = Student.objects.all().values("id","name","phone")
        page_obj = Paginator(all_students,limit)#分页对象
        stus = list(page_obj.get_page(page))#将QuerySet格式转成list
        data = {"error_code":0,"msg":"操作成功","data":stus,"count":page_obj.count}
        return JsonResponse(data,json_dumps_params={"ensure_ascii":False})

    #对post请求进行校验
    def post(self,request):
        # ModelForm模块会自动找到表,根据表字段的要求进行数据校验
        stu_form = StudentForm(request.POST)#校验的结果
        if stu_form.is_valid(): #如果校验的结果是合法的
            # **stu_form.cleaned_data  校验过的post方法传过来的参数
            Student.objects.create(**stu_form.cleaned_data)
            data = {"error_code":0,'msg':'添加成功'}
        else:
            data = {"error_code":-1,'msg':stu_form.errors.get_json_data()}
            #stu_form.errors 获取错误信息
        return JsonResponse(data,json_dumps_params={"ensure_ascii":False})

猜你喜欢

转载自www.cnblogs.com/yanyan-/p/11782968.html
今日推荐