1.普通序列化器
在我们进行增删改查时,将orm操作的数据转换为json数据。方便存储和辨别
1.1 编写方式
在models.py里写模型类
from django.db import models
# Create your models here.
class People(models.Model):
name = models.CharField(max_length=20,verbose_name='姓名')
sex = models.CharField(max_length=2,verbose_name='性别')
class Meta:
verbose_name = '人物表'
verbose_name_plural = verbose_name
db_table = 'people'
def __str__(self):
return self.name
在子应用下创建serializers文件,并导入模块
from rest_framework import serializers
from myapp.models import People
class PeopleSerializer(serializers.Serializer):
name = serializers.CharField(max_length=20)
sex = serializers.CharField(max_length=2)
1.2 普通序列化器序列化
获取全部数据后面要用many=True,单个数据用 instance
class PeopleView(APIView):
def get(self,request):
# 获取所有任务信息
people = People.objects.all()
# 使用序列化器对数据进行序列化
ser = PeopleSerializer2(people,many=True)
return Response(ser.data,status=200)
1.3 普通序列化器反序列化创建
#增加一个人的信息
def post(self,request):
# 使用序列化器,进行反序列化
ser = PeopleSerializer2(data=request.data)
# 判断反序列化是否成功
# 如果出现异常raise_exception=True就会自动抛出异常
if ser.is_valid(raise_exception=True):
ser.save()
return Response({'msg':'success'},status=201)
return Response({'msg':'error'})
在serializers文件里重新配置create
#新增数据调用create方法
def create(self, validated_data):
obj = People.objects.create(
**validated_data
)
# 返回新生成的ORM对象
return obj
1.4 普通序列化器反序列化更新
在serializers文件里重新配置update
def update(self, instance, validated_data):
instance.name = validated_data.get('name')
instance.sex = validated_data.get('sex')
instance.save()
# 返回修改后的ORM对象
return instance
在view.py里写put更新代码
#修改一个人的信息
def put(self,request,id):
try:
peo_data = People.objects.get(id=id)
except Exception as e:
print(e)
# 数据不存在的状态码是404
return Response({'msg':'error'},status=404)
# instance=peo_data要修改的ORM对象
ser = PeopleSerializer2(instance=peo_data,data=request.data)
if ser.is_valid(raise_exception=True):
# 保存
ser.save()
# 添加修改成功为201
return Response({'msg': 'success'}, status=201)
return Response({'msg': 'error'}, status=500)
1.2 模型序列化器
class PeopleSerializer2(serializers.ModelSerializer):
class Meta:
# 指定模型
model = People
# 指定映射字段
fields = "__all__"