ModelSerializer与常规的Serializer相同,但提供了:
from django.db import models
# Create your models here.
class Students(models.Model):
name = models.CharField(verbose_name='姓名', max_length=255)
classmate = models.IntegerField(verbose_name='班级')
studentID = models.IntegerField(verbose_name='学号')
description = models.TextField(verbose_name='描述')
class Meta:
db_table = 'students'
class StudentModelSerializers(ModelSerializer):
"""学生信息模型序列化器"""
class Meta:
model = Students
fields = '__all__'
__all__
是指为包含全部字段python manage.py shell
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Students
from .serilizers import StudentsSerializers,StudentModelSerializers
class Students1Apiview(APIView):
def get(self, request):
# 获取数据集(学生模型对象)
students_data = Students.objects.all()
# 实例化序列化器,得到序列化器对象
ser = StudentModelSerializers(instance=students_data, many=True)
# 调用序列化器对象的data属性方法获取转换后的数据
data = ser.data
# 响应数据
return Response(data)
def post(self, request):
# 反序列化数据
student = StudentModelSerializers(data=request.data)
# 校验不通过
if not student.is_valid():
# 返回错误信息
return Response(student.errors)
# 校验通过,保存数据
student.save()
# 响应数据
return Response(student.data)
class StudentDerail1Apiview(APIView):
# 获取一个学生的信息
def get(self, request, pk):
student = Students.objects.get(pk=pk)
ser = StudentModelSerializers(instance=student)
return Response(ser.data)
# 修改一个学生的信息
def put(self, request, pk):
instance = Students.objects.get(pk=pk)
ser = StudentModelSerializers(instance=instance, data=request.data)
if not ser.is_valid():
return Response(ser.errors)
ser.save()
return Response(ser.data)
# 删除一个学生的信息
def delete(self, request, pk):
Students.objects.get(pk=pk).delete()
return Response({'detail': '删除成功!!'})
from django.urls import path, re_path
from . import views
urlpatterns = [
# 基出序列化器
# 多数据操作
path('students/', views.StudentsApiview.as_view()),
# 单个数据进行操作
re_path('students/(?P\d+)/' , views.StudentDerailApiview.as_view()),
# 模型序列化器
path('students1/', views.Students1Apiview.as_view()),
re_path('students1/(?P\d+)/' , views.StudentDerail1Apiview.as_view()),
]
__all__
表示包含所有模型字段,也可以写明具体哪些模型字段,如下:fields = ['id', 'name', 'classmate']
exclude = ['description']
read_only_fields = ['id', 'name', 'studentID']
extra_kwargs = {
'name': {'required': True},
'studentID': {'min_value': 41809010200, 'required': True},
}