码迷,mamicode.com
首页 > 其他好文 > 详细

drf序列化

时间:2019-03-26 16:58:00      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:status   type   exclude   重写属性   注意   objects   art   color   def   

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序列化

标签:status   type   exclude   重写属性   注意   objects   art   color   def   

原文地址:https://www.cnblogs.com/yangyufeng/p/10600925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!