zoukankan      html  css  js  c++  java
  • rest_framwork之序列化组件

    1 序列化组件
    (1)原生序列化
        1)导入
          from django.core.serializers import serializer
        2)使用
          class BookView(APIView):
            def get(self, request):
                books = Book.objects.all()
                #序列化
                serialized_data = serialize("json", books)
                #返回序列化结果
                return HttpResponse(serialized_data)
                
    (2)序列化组件
          1)导入
            from rest_framework import serializers
          2) 定义序列化类BookSerializer(字段名必须与model中定义的字段名一样,否则会报错)
            class BookSerializer(serializers.Serializer):
              title= serializers.CharField(max_length=32)
              price=serializers.CharField(max_length=32)
              #显示出来的是Id (多对一,外键字段)
              publish=serializers.CharField(max_length=32)
              publish_name = serializers.CharField(max_length=32, source="publish.name", read_only=True)
              # 多对多字段(该字段名 与下面的get_后面的字段名必须一样)
              authors_list = serializers.SerializerMethodField()
              
              
              #多对多字段的处理(get_是规定写法,后面的名同上authors_list)
              def get_authors_list(self,book_obj):
                authors=list()
                
                for author in book_obj.authors.all():
                    authors.append(author.name)
                    
                return authors
                
                
                
            3) 定义views.py
            
              #1 首先导入2)步中自定义的序列化类
                class BookView(APIView):
                   def get(self,request):
                     #2获取数据
                     books=Book.object.all()
                      #3序列化 (BookSerializer是引入的序列化类)
                     serialized_data=BookSerializer(books,many=True)
                       #4返回序列化结果
                     return Response(serialized_data.data)
                    
    (3)通过drf的序列化组件进行GET接口设计
            - 定义views.py
            class BookFilterView(APIView):
                def get(self,request,nid):
                     book_obj=-Book.objects.get(pk=nid)
                     ser_data=BookSerializers(book_obj,many=False)
                     print('ser_data',ser_data)
                     return Response(ser_data.data)
                        
                
    2 视图组件(mixins)
      视图组件是用来优化接口逻辑的
     (1) 导入
       from rest_framework.mixins import(
         ListModelMixin,
         CreateModelMixin,
         RetrieveModelMixin,
         DestoryModelMixin,
         UpdateModelMixin
         )
       from rest_framework.generics import GenericAPIView
       
       (2) 定义序列化类
        同上定义的序列化类一样
        
       (3) 定义view.py
         class BookView(ListModelMixin, CreateModelMixin, GenericAPIView):
            queryset = Book.objects.all()
            serializer_class = BookSerializer
            
            def get(self, request):
                return self.list(request)
            
            def post(self, request):
                return self.create(request)
                
        class BookFilterView(RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin, GenericAPIView):
            queryset = Book.objects.all()
            serializer_class = BookSerializer
            
            def get(self, request):
                return self.retrieve(request)

            def put(self, request):
                return self.update(request)
            
            def delete(self, request):
                return self.destroy(request)
                
                
    3 generic
    (1) 导入
    from rest_framework import generic

    (2)使用
    #查看添加
    class BookView(generic.ListCreateAPIView):
      #queryset 与 serializer_class 名字是固定的
      queryset = Book.objects.all()
      serializer_class=BookSerializer
     
    #更改删除 查看单条数据
    class BookView(generic.RetricveUpdateDestroyAPIView):
      queryset= Book.objects.all()
      serializer_class=BookSerializer
     
     
     

    4 viewset
    (1) 导入
    from rest_framework.viewsets import ModelViewSet

    (2) 使用
    class BookView(ModelViewSet):
      queryset = Book.object.all()
      serializer_class=BookSerializer
     

    (3)在url中配置
    urlpatterns=[
       re_path(r'books/$', views.BookView.as_view({
       'get':'list';
       'post':'create';
       })),
       re_path(r'books/(?P<pk>d+)/$', views.BookView.as_view({
        'get':'retrieve',
        'put':'update',
        'delete':'destory'
       
       }))
    ]

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/mlhz/p/10108680.html
Copyright © 2011-2022 走看看