DRF(6)- 序列化器之反序列化

这篇博客详细介绍了Django REST Framework(DRF)中的序列化器反序列化过程,包括字段类型校验、字段选项校验、单字段和多字段校验,以及自定义校验方法。文中通过类视图和序列化器展示了如何在创建和更新数据时进行数据校验,并探讨了ModelSerializer的使用、fields、read_only_fields和extra_kwargs的配置方法,用于控制序列化器的行为和数据约束。
摘要由CSDN通过智能技术生成
1,反序列化-字段类型校验
  • 目的: 能够使用字段类型对数据进行校验

  • 操作流程:

    • 1, 类视图(booktest/views.py)

      • #===========4,反序列化-字段类型校验===========
        from booktest.serializers import BookSerializer
        
        #1,准备数据
        book_dict = {
                 
            "btitle":"金瓶x",
            "bpub_date":"1999-1-1",
            "bcomment":10,
            "bread":"哈哈"
        }
        
        #2,创建序列化器
        serializer = BookSerializer(data=book_dict)
        
        #3,校验数据,如果传递raise_exception=True,报错之后有提示信息
        # serializer.is_valid()
        serializer.is_valid(raise_exception=True)
        
        
    • 注意点:

      • serializer.is_valid() 可以校验数据是否符合,序列化器的要求
      • 参数: raise_exception=True, 报错之后有提示信息
2,反序列化-字段选项校验
  • 目的: 能够使用字段选项对数据进行校验

    • 1, 类视图(booktest/views.py)

    • #===========5,反序列化-字段选项校验===========
      from booktest.serializers import BookSerializer
      
      #1,准备数据
      book_dict = {
             
          "btitle":"金瓶xx",
          "bpub_date":"1999-1-1",
          "bcomment":10,
          "bread":100
      }
      
      #2,创建序列化器
      serializer = BookSerializer(data=book_dict)
      
      #3,校验数据,如果传递raise_exception=True,报错之后有提示信息
      # serializer.is_valid()
      serializer.is_valid(raise_exception=True)
      
      
    • 2,序列化器

      • class BookSerializer(serializers.Serializer):
            ..
            btitle = serializers.CharField(max_length=20,min_length=3,label="名称")
            bpub_date = serializers.DateField(label="发布日期")
            bread = serializers.IntegerField(default=0,max_value=10000,min_value=0,label="阅读量")
        
3,反序列化-单字段校验
  • 目的: 能够使用单字段,方法对数据进行校验

  • 操作流程:

    • 1, 序列化器

      • #1,定义书籍序列化器
        class BookSerializer(serializers.Serializer):
            ...
            
            #4,单字段方法校验,对书籍的名字进行校验
            def validate_btitle(self, value):
                """
                :param value: 就是需要校验的btitle数据
                :return:
                """
                # print("value = %s"%value)
        
                #1,校验书籍名称
                if "金瓶" not in value:
                    raise serializers.ValidationError("书籍中不包含金瓶")
        
                #2,返回
                return value
        
        
    • 2, 类视图

      • #===========6,反序列化-单字段校验===========
        from booktest.serializers import BookSerializer
        
        #1,准备数据
        book_dict = {
                 
            "btitle":"金瓶xx"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值