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

  • 相关阅读:
    将文献的bibtex引用格式批量转换为bibitem格式参考文献
    ubuntu下webbench作网站压力测试教程【webbench安装】
    Windows10安装虚拟机VMware并且安装ubuntu16系统
    ubuntu 16.04系统下解决MySQL 的root用户重置密码问题
    elementui 中 日期时间插件 结束时间大于开始时间
    SqlDbType 与 .Net 数据类型对照表
    可用的datatable转换成List<T>
    【beyond compare4 秘钥】亲测4.1.6可用
    winform 自定义控件圆按钮插件
    net framework 4.0 wcf发布到IIS
  • 原文地址:https://www.cnblogs.com/mlhz/p/10108680.html
Copyright © 2011-2022 走看看