zoukankan      html  css  js  c++  java
  • 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__'
    
  • 相关阅读:
    自动化测试-02-Unittest-单元测试框架介绍
    自动化测试-01-cookie认识
    Java面试汇总
    多线程总结一:基本概念
    用Java编写你自己的简单HTTP服务器
    Spring高级事务管理难点剖析
    Http协议详解
    Java 互联网工程师要具备哪些技能或技术?
    架构师都要懂哪些知识
    java学习路线
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/12382967.html
Copyright © 2011-2022 走看看