DRF序列化

  Django ORM对象 --> JSON格式的数据  序列化

  JSON格式的数据 --> Django ORM数据  反序列化

  需要两个工具:

from rest_framework.serializers import Serializer
from rest_framework.serializers import MoselSerializer 

  类比Django中的form组件

    Django form --> HTML表单

    HTML表单  --> ORM数据

  用法:

  many=True参数

  实例化 序列化器对象的时候, 添加many=True参数, 能实现序列化多个对象

  正向序列化用 read_only = True

  反向序列化用 write_ony = True

  source

category = serializers.CharField(source="get_category_display" read_only=True)

# Obj --> JSON
# Obj.title --> "书名"
# Obj.get_category_display() --> "Python"

 

  ModelSerializer

    和model一对一绑定的序列化类

  serializerMethodField字段

Django REST Framework  序列化和校验 知识点

Django REST Framework  序列化和校验 知识点

 

 Django REST Framework  序列化和校验 知识点

 

校验

   校验的规则3中方法

  1. 局部的校验方法

# 在serializer类中定义局部校验规则    # validate 加 字段名
    def validate_title(self, value):
        # value就是需要检验的这个字段的值
        """类似于Form组件的局部钩子"""
        if '红烧牛肉' in value:
            raise serializers.ValidationError('你是魔鬼吗?')
        else:
            return value

  2. 全局的校验方法

def validate(self, attrs):
    pass

 

 

  3. 自定义的校验函数

# 类似于Form组建中的自定义校验规则
title = serializers.CharField(max_length=32, validators=[my_heiheihei, ])

def my_heiheihei(value)
    pass

 

  校验规则由序列化对象的 is_valid 触发

 def post(self, request):
        # 1. 获取前端提交的数据
        # 1.1 APIView
        # self.request是谁?  不是Django原来的哪个request  self._request才是原来的request
        print(request.data)  # APIView 包装的数据
        # 2. 对数据做有效性校验
        ser_obj = BookModelSerializer(data=request.data)
        if ser_obj.is_valid():
            ser_obj.save()  # 调用的是BookSerializer类中的create方法,需要自己去实现
            # 3. 拿到序列化的数据去数据库创建新记录
            return Response("ok")
        else:
            # 返回校验失败的错误提示信息
            return Response(ser_obj.errors)