zoukankan      html  css  js  c++  java
  • DRF框架之Serializer序列化器的反序列化操作

    我们首先要明确什么是反序列化操作

    反序列化操作:JOSN数据 --> 字典数据 --> 验证通过的字典数据 --> 模型数据

    我们在进行反序列化操作时,首先要保证就是要拿到的字典数据一定要通过认证

    1、定义一个序列化器
    from rest_framework import serializer
    class UserSerializer(serializers.Serializer):
        '''定义用户Serializer序列化器'''
        # 这里的字段需要和模型类中的字段名、字段类型、约束一致
        name = serializers.CharField(max_length=20)  # 姓名
        age = serializers.IntegerField()   # 年龄
        address = serializers.CharField(max_length=20)  # 地址
    
    2、准备JSON数据或字典数据
    data = {'name':'某XX','age':19,'address':'河南'}
    
    3、验证字典数据

    我们使用序列化器对象点出is_valid()方法进行验证。验证成功返回True,否则返回False

    data = {'name':'某XX','age':19,'address':'河南'}
    user_ser = UserSerializer(data=data)
    if user_ser.is_valid():   # 如果验证成功,则保存数据返回
        user_ser.save()
        return Response({'msg':'OK','code':200})
    else:    # 如果验证失败,则返回错误errors
        return Response({'error': user_ser.errors})
    
    4、对单一字段进行验证

    我们需要在序列化器类中定义一个名字wei(validata_字段名) 的方法,来补充验证逻辑

    def validate_name(self, attrs):
        '''
        对name字段进行验补充
        :param value: 前段传递的name数据
        :return: 验证成功:返回value;验证失败:返回错误信息
        '''   
        if attrs != 'peter':
            raise serializer.ValidationError('不是peter本人')
      	return attrs
    
    5、对所有字段进行验证
    def validate(self, attrs):
            '''
            对多个字段进行验证
            :param attrs: 前段传递的字典数据
            :return: 验证成功:返回attrs;验证失败:返回错误信息
            '''
           	name = attrs['name']
            print(name)
            if name != 'peter':
                # 失败
                raise serializer.ValidationError('不是peter本人')
            # 成功
      		return attrs
    
    6、添加数据,重写create方法
    def create(self,validated_data):
         '''
            序列化器进行新增数据的方法
            :param validated_data: 通过验证的字典数据
            :return:根据RESTful设计方式,需要将添加的数据返回
          '''
        return User.objects.create(**validated_data)
    

    7、修改数据,需要在序列化器类中定义一个update()方法

     def update(self, instance, validated_data):
            '''
            序列化器进行修改数据的方法
            :param instance: 需要修改的模型对象
            :param validated_data: 前端传递的字典数据
            :return: 根据RESTful设计方式,需要将修改的数据返回
            '''
            
            # 新值覆盖旧值
            instance.字段名 = validated_data.get(字段名)
            instance.save()
            return instance
    
  • 相关阅读:
    linux tcp中time_wait
    linux查看系统信息
    运行程序出错无法找到库文件
    安装keepalived
    python 深拷贝与浅拷贝
    python import eventlet包时提示ImportError: cannot import name eventlet
    [原创] 用两个queue实现stack的功能
    [原创] 用两个stack实现queue的功能
    [原创] 编写函数,实现对链表元素的排序与分类
    python 装饰器
  • 原文地址:https://www.cnblogs.com/sleepimg/p/13886488.html
Copyright © 2011-2022 走看看