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'
       
       }))
    ]

  • 相关阅读:
    小程序开发-7-访问api数据与ES6在小程序中的应用
    小程序开发-8-流行页面编码与组件的细节知识
    小程序开发-6-组件数据、事件与属性
    当安装mongodb客户端出现了Failed to load list of databases
    对bluebird的理解
    百度地图实现案例
    iScroll实现下拉刷新上拉加载
    nodejs环境变量配置
    检测Python程序本身是否已经在运行
    用Python快速找到出现次数最多的数据
  • 原文地址:https://www.cnblogs.com/mlhz/p/10108680.html
Copyright © 2011-2022 走看看