ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

drf : 序列化类使用many参数的作用,源码解析

2022-04-01 19:34:35  阅读:183  来源: 互联网

标签:__ ser many 源码 BookSerializers 序列化 data book


序列化类使用many参数的作用

views.py

from rest_framework.views import APIView
from .serizlizer import BookSerializers
from rest_framework.response import Response
from .models import Books


class BookView(APIView):
    def post(self, request):
        print(request)
        ser = BookSerializers(data=request.data)
        if ser.is_valid():
            ser.save()
        return Response(ser.data)

    def get(self, request):
        book_list = Books.objects.all()
        # many=True 代表序列化多条数据
        ser = BookSerializers(instance=book_list, many=True)
        """
        <class 'rest_framework.serializers.ListSerializer'>
        ser 是ListSerializer的对象
        """
        print(type(ser))
        # 这一步才是真正将book_list转为字典并返回。调ser.data才是真正的序列化过程
        return Response(ser.data)


# 查询单条
class BookDetailView(APIView):
    def get(self, request, pk):
        book = Books.objects.filter(pk=pk).first()
        # 不传many默认为,many=False
        ser = BookSerializers(instance=book)
        """
        <class 'app01.serizlizer.BookSerializers'>
        ser是BookSerializers的对象
        """
        print(type(ser))
        # 这一步才是真正将book_list转为字典并返回。调ser.data才是真正的序列化过程
        return Response(ser.data)

这里涉及到元类的知识。

类也是一个对象,一切皆对象。类这个对象也是一个类实例化得到的,这个类就叫做元类。

对象是实例化的得到的,类也是一个对象,BookSerializers这个类也是一个对象,既然是对象,那么也会有类,类的类就叫元类。

所以,类也是由一个了类产生的,产生这个类的类就叫元类。

对象的产生过程有__new__所控制

注意:对象的实例化过程,__new____init__之前执行,__new__是产生空对象,__init__给对象赋值。

那么ListSerializer 和 BookSerializer 有什么联系。?

ListSerializer就是一个列表,列表套了一个个的Serializer。[ser1,ser2,ser3...]

# 查询单条
class BookDetailView(APIView):
    def get(self, request, pk):
        book = Books.objects.filter(pk=pk).first()
        # 不传many默认为,many=False
        ser = BookSerializers(instance=book)
        """
        <class 'app01.serizlizer.BookSerializers'>
        ser是BookSerializers的对象
        """
        print(type(ser))
        """
        BookSerializers(instance=<Books: Books object (1)>):
        id = IntegerField(label='ID', read_only=True)
        name = CharField(max_length=32)
        price = IntegerField()
        publish = PrimaryKeyRelatedField(allow_null=True, queryset=Publish.objects.all(), required=False)
        """
        print(ser)
        # 这一步才是真正将book_list转为字典并返回。调ser.data才是真正的序列化过程
        return Response(ser.data)

标签:__,ser,many,源码,BookSerializers,序列化,data,book
来源: https://www.cnblogs.com/xiejunjie8888/p/16088585.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有