Django---序列化与反序列化{小}

# 1. 反序列化----单表入库
class Addcate(APIView):
    def post(self,request):
        # 用postman进行存入数据
        data = request.data
        # 把定义好的反序列化拿来进行存入数据,也就是把获取的数据转成python串
        cate = CateUnserializer(data=data)
        # 判断cate值
        if cate.is_valid():
            cate.save()
            return HttpResponse('OK')
        return HttpResponse('不OK')
# 1). 反序列化  添加分类
# 序列化导包
from rest_framework import serializers
class CateUnserializer(serializers.Serializer):
    # 反序列化是 serializers.Serializer
    name = serializers.CharField(max_length=32)
    # 添加
    # data = {'name':'dsds','pwd':123}
    # **data  => name='dsds',pwd=123
    def create(self,data):
        return Cate.objects.create(**data)

---------------------------------------------------------------------------------------------------
# 2. 添加商品,且所属分类 
class AddGoods(APIView):
    def post(self,request):
        # 例,只是把data定义成一个固定的值,进行存储
        #** data = {'name':'oppo','cates':1}
        data = {'name':'oppo','cates_id':1}
        goods = GoodsUnserializer(data=data)
        if goods.is_valid():
            goods.save()
            return HttpResponse('OK')
        return HttpResponse('不OK')

#2). 反序列化 --出库----添加商品
class GoodsUnserializer(serializers.Serializer):
    name = serializers.CharField(max_length=32)
    # 在我们的商品表里有外建字段,是int类型
    #** cates = serializers.IntegerField()
    cates_id = serializers.IntegerField()

    # 添加商品、
    def create(self,data):
        # return Goods.objects.create(
            #** 
           #  cates_id = data.pop('cates'),**data)
    	 return Goods.objects.create(**data)
        
    # 修改商品---->包含三个参数(self,instance,data)
    def update(self,instance,data):
        # instance == Goods.objects.filter(id=2)
        return instance.update(**data)
    
---------------------------------------------------------------------------------------------------
# 修改制定字段的类型
    def put(self,request):
        goods = Goods.objects.filter(id=1)
        data = {'name':'iphone','cates':2}
        g = GoodsUnserializer(goods,data=data)
        if g.is_valid():
            g.save()
            return HttpResponse('YES')
        return HttpResponse('NO')
----------------------------------------------------------------------------------------------------
# 4*用序列化查询分类
===== views.py =====
class Getcate(APIView):
    def get(self,request):
        # 查询出id为1的分类
        cate = Cate.objects.filter(id=1).first()
        # 查询的结果为first(),就是many=False,也可以不用书写
        # 查询的结果为all(),就是many=True
        ser = CateSerializer(cate)
        return JsonResponse(ser.data)
# 4* 序列化--出库 ------  cate
class CateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cate
        fields = '__all__'
        # fields = ("name",) # 保证是一个元组,或列表
        # exclude = ("name",) # 除了Name之外的所有字段
---------------------------------------------------------------------------------------------------
# 用序列化查询商品,并且查询属于谁的分类
class Getgoods(APIView):
    def get(self,request):
        # 查询出id为2的商品
        goods = Goods.objects.filter(id=2).first()
        # 进行序列化转数据类型
        ser = GoodsSerializer(goods)
        return JsonResponse(ser.data)
# 商品的序列化
class GoodsSerializer(serializers.ModelSerializer):
    # 当查询的数据有外建指向,且想显示出姓名,就可以用下面方法利用外建属性直接指定
    catems = serializers.CharField(source='cates.name')
    class Meta:
        model = Goods
        fields = ('catems','id','name')
        
 # 当我们查询的需求在俩个序列化里,我们可以通过以下的方法导进来
 # goods = GoodsModelSerializer(many=True)就可以使用了,
 # 他最后的数据类型是[{}]
#class ShopModelSerializer(serializers.ModelSerializer):
    # goods = GoodsModelSerializer(many=True)
    # class Meta:
    #     model = Shop
    #     fields = '__all__'
原文地址:https://www.cnblogs.com/xinzaiyuan/p/12382967.html