drf序列化

Posted yangyufeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了drf序列化相关的知识,希望对你有一定的参考价值。

1.rest-framework序列化之Serializer

rest-framework序列化之Serializer步骤
    1. 创建一个类,继承Serializer
    2. 在类中写要序列化的字段
‘‘‘
class BookSerializer(serializers.Serializer):
    # 序列化表中的某几个字段 固定写法
    nid = serializers.CharField()
    name = serializers.CharField()
    title = serializers.CharField(source=‘name‘)
    price = serializers.CharField()
    publish = serializers.CharField(source=‘publish.email‘)
‘‘‘
    3. 在View.py中使用
‘‘‘
    # 使用序列化
    def get(self, request):
        response = {‘status‘: 100, ‘msg‘: ‘获取成功‘}
        book_list = Book.objects.all()
        # 实力化BookSerializer, 将要实力化的数据传入(Queryset对象)
        # 要是用序列化一定要加many=True
        book_ser = BookSerializer(book_list, many=True)
        response[‘data‘] = book_ser.data
        return Response(response)
‘‘‘

2. source的用法

  1. 指定字段 2. 指定方法 3.深度查询(跨表)

3. rest-framework序列化之ModelSerializer

# 继承ModelSerializer,可以直接指定要序列化的表模型
1. 写一个类, 继承ModelSerializer
2. 在类内部写
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Book
            # 指定要序列化的字段
            # fields=[‘nid‘,‘name‘]
            # __all__显示全部内容
            field =__all__
            # 筛选(注意,不能跟fields连用)
            exclude = [name, price]
            # 深度
            depth = 1
    重写属性  
    publish字段,返回出版社的所有信息,包括id,name,email。。。。
    #SerializerMethodField配合一个方法,方法的返回值会付给publish
    publish=serializers.SerializerMethodField()
    def get_publish(self,obj):
        # print(type(obj))
        # print(obj)
        return {id:obj.publish.pk,name:obj.publish.name}

4. 序列化单条数据

  book_ser=BookSerializer(instance=book,many=False)

5. 反序列化之局部和全局钩子(序列化的类一定是继承ModelSerializer的类)

    def validate_name(self, value):
    if value.startswith(sb)
        raise ValidationError(书名不能以s开头)
    else:
        return value
    #全局钩子函数,对全局字段进行校验
    def validate(self,atrr):
        # print(atrr)
        name=atrr.get(name)
        price=atrr.get(price)
        if name != price:
            raise ValidationError(错了)
        else:
            return a

 

以上是关于drf序列化的主要内容,如果未能解决你的问题,请参考以下文章

DRF视图

DRF视图 𵀝

drf框架 2 drf框架的请求生命周期(as_view和dispatch方法), 请求解析渲染响应异常, 序列化组件 ,ORM配置回顾(media文件配置),应用在settings.py中(代码片

DRF框架serializer之视图优化

drf序列化器之请求响应以及视图

DRF之序列化