以下例子对数据库表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})