Fork me on GitHub

序列化和反序列化(增删改查)

一、什么是序列化与反序列化
我们把对象(或变量)从内存变成可存储或可传输的过程称之为序列化,在python中称之为picking;
# pickle模块是python专用的持久化模块,可以持久化包括自定义类在内的各种数据;只能在python程序之间进行数据交换;
# 自定义的类的实例如何保存在一个文件中?如何从文件中读取数据,并让他们在内存中再次恢复成自己对应的类的实例?

按照某种规则,把内存中的数据保存到文件中,文件是一个字节序列,所以必须要把内存数据转换成为字节序列,输出到文件,这就是序列化;反之,从文件的字节恢复到内存,就是反序列化;

二、为什么要序列话
*持久化的保持状态
*跨平台的数据交互(json)

三、序列化代码
创建serializers.py写序列化器

  from rest_framework import serializers
  from apps.app02.models import User

  class UserSer(serializers.Serializer):
      name = serializers.CharField(max_length=32)
      pwd = serializers.CharField(max_length=128)

#自定义语法:.save()执行,就会立即调用create方法来创建数据
def create(self, validated_data):
    """
    :param instance:
    :param validated_data: 是表单或者vue请求所携带的json数据
        {"name":"chenxin","pwd":"123"}

    """
    return User.objects.create(**validated_data)

#instance
#validated_data
def update(self, instance, validated_data):
    """
    :param instance: 你的数据库里的需要查询的对象
    :param validated_data: 是表单或者vue请求所携带的json数据
            {"name":"chenxin","pwd":"123"}

    """
    instance.name = validated_data.get('name',instance.name)
    instance.pwd = validated_data.get('pwd',instance.pwd)

    instance.save()
    return instance

#就是对name这个字段进行判断

  
# def validate_name(self, attrs):
#     name = attrs["name"]
#     if name != 'name':
#         raise serializers.ValidationError('这个用户不从在')
#     return attrs

增删改查操作

  from rest_framework.views import APIView
  from rest_framework.response import Response
  from apps.app02.models import User
  from apps.app02.ser import UserSer
  class Oued(APIView):
  #添加数据
      def post(self,request):
      #获取数据
      data = request.data
      # print(data)
      #序列化添加
      user_li = UserSer(data=data)
      #验证
      # print(user_li,'----------------------------------------')
      user_li.is_valid()
      #保存
      user_li.save()
      #如果异常抛出异常
    # print(user_li.errors)
    #返回结果
    return Response({'code':200})

def get(self,request):
    #获取数据库中所有数据
    user = User.objects.all()
    # print(user,'---------------------------------')
    #(<QuerySet [<User: User object (1)>, <User: User object (2)>
    #序列化所有数据
    user_ser = UserSer(user,many=True)  #many=True  序列化所有数据
    # print(user_ser,'----------------------------------------------------------')
    #UserSer(<QuerySet [<User: User object (1)>, <User: User object (2)>, <User: User object (3)>]>, many=True):

    #序列化出的数据不能直接返回需要添加到字典里
    res = {
        'data':user_ser.data
    }
    #返回结果
    return Response({'code':200,'data':res})

def put(self,request):
    #获取数据
    data = request.data

    #获取id
    id = request.data.get('id')
    print(id)
    #通过模型找见id对应的数据
    user_l = User.objects.get(pk=id)
    print(user_l)

    #序列化
    user_ser = UserSer(user_l,data=data)

    #判断
    user_ser.is_valid()

    #保存
    user_ser.save()

    #返回值
    return Response({'code':200})
posted @ 2020-10-27 20:42  梦鑫  阅读(321)  评论(0编辑  收藏  举报