以下例子对数据库表Student进行操作
#models.pyclass 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) addr = models.CharField(verbose_name=‘家庭地址‘, default=‘北京‘, max_length=20) work_addr = models.CharField(verbose_name=‘工作地址‘, default=‘北京‘, max_length=20) create_time = models.DateTimeField(verbose_name=‘创建时间‘, auto_now_add=True) # auto_now_add的意思,插入数据的时候,自动取当前时间 update_time = models.DateTimeField(verbose_name=‘修改时间‘, auto_now=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 django.forms import ModelForm from user.models import Student from django.views import View from django.core.paginator import Paginator from django.http import HttpResponse,JsonResponse # 继承ModelForm,对数据库Student进行校验 class StudentForm(ModelForm): class Meta: model = Student fields = ‘__all__‘ #代表所有的字段 # fields = [‘name‘,‘phone‘] #某个字段 # exclude = [‘money‘] #排查哪个字段 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}) def put(self,request): #实现部分修改 ‘‘‘如果不是post请求,request.POST里面获取不到数据‘‘‘ # 1、如果全部通过,把数据放clean_data里面发送请求 # 2、如果不是全部通过,判断传过来的字段是否有没校验成功的 # 3、如果有,则返回错误信息 # 4、如果没有,则把key-value写到字典clean_data里面,发送请求 # print(‘request.META‘,request.META) #请求端传过来的所有原始数据都在request.META里面 # parse_file_upload是django用来解析body里面的数据和文件的 put_data, files = request.parse_file_upload(request.META, request) print(‘put_data‘, put_data) stu_form = StudentForm(put_data) # 它校验的是全部的字段 id = request.GET.get(‘id‘, 0) clean_data = {} if stu_form.is_valid(): # stu_form.cleaned_data就是校验了的数据 clean_data = stu_form.cleaned_data else: error_keys = set(stu_form.errors.get_json_data().keys()) # 校验没有通过的字段 put_keys = set(put_data.keys()) # 这个传过来的字段 if error_keys & put_keys: #如果有交集,说明传过来的字段有没通过校验的 data = {"error_code": -1, ‘msg‘: stu_form.errors.get_json_data()} return JsonResponse(data, json_dumps_params={"ensure_ascii": False}) else: #如果没有交集,则说明传过来的字段都通过校验了 for k in put_keys: clean_data[k] = put_data.get(k) Student.objects.filter(id=id).update(**clean_data) data = {"error_code": 0, ‘msg‘: "操作成功"} return JsonResponse(data, json_dumps_params={"ensure_ascii": False}) def delete(self,request): id = request.GET.get(‘id‘,0) Student.objects.filter(id=id).delete() data = {"error_code": 0, ‘msg‘: ‘删除成功‘} return JsonResponse(data, json_dumps_params={"ensure_ascii": False})
原文地址:https://www.cnblogs.com/yanyan-/p/11782968.html
时间: 2024-10-08 17:21:29