序列化组件

Posted liu--huan

tags:

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

自己手撸序列化组件

  class Book(APIView):
        # parser_classes = [FormParser, ]

        def get(self, request):
            book_list = models.Book.objects.all()
            temp = []
            for book in book_list:
                temp.append({"title": book.title, "publish_date": book.publishDate})  # 如果字段较多,不方便
            return JsonResponse(temp, safe=False)

        def post(self, request):
            print("post")
            print(request.data)
            return HttpResponse("ok")

django自带的序列化组件

  from django.core.serializers import serialize
        class Book(APIView):
            def get(self,request,*args,**kwargs):
                books = models.Book.objects.all()
                data = serialize(books,json)  # django自带的序列化组件
                return HttpResponse(data)

使用rest_framework的序列化组件

  from rest_framework import serializers
        class BookSerializer(serializers.Serializer):
            name = serializers.CharField(source=name)
            price = serializers.CharField()
            test = serializers.CharField(source=publish.id)

视图层使用上面的序列化组件

class Book(APIView):
    def get(self,request,*args,**kwargs):
        ret = models.Book.objects.all()
        book_ser = mySel.BookSerializer(ret,many=True) #many=True表示可以序列化很多条出来
        return JsonResponse(book_ser,safe=False)            

取出一个字段的两种方法

(1):表里面重写__str__方法
(2):用source,可以指定字段,也可以指定方法
        test = serializers.CharField(source=publish.id)
        name = serializers.CharField(source=name)    

使用SerializerMethodField

publish = serializers.SerializerMethodField()
def get_publish(self,obj):  # 这个 obj 是当前类的对象
    dic = {name:obj.publish.name,email:obj.publish.email}
    return dic

 

-使用ModelSerializer
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        # 指定表名字
        model = Book
        # 取所有字段
        # fields = ‘__all__‘
        # 只取 nid,name 字段
        fields = [nid,name]
        # 去掉 nid,name 字段
        # exclude = [‘publish‘,‘authors‘]
        # depth指定深度为2,就是最多跨2张表查询
        # depth = 2
    

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

 

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

RestFramework

Unity自定义组件之序列帧播放组件

VsCode 代码片段-提升研发效率

rest_framework

微信小程序代码片段

如何阻止片段一直弹出到根片段? [导航组件]