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

序列化组件

时间:2018-12-14 22:42:40      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:lis   http   return   method   取出   def   sel   两种   一个   

自己手撸序列化组件

  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
    

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

 

序列化组件

标签:lis   http   return   method   取出   def   sel   两种   一个   

原文地址:https://www.cnblogs.com/liu--huan/p/10121776.html

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