zoukankan      html  css  js  c++  java
  • django-restframework 序列化详解

    django-restframework 组件是django下面的一个,但是需要自己下载并使用

    1、

      在自己的app下创建一个python文件叫做serializer的文件(其实也可以不用创建,在views里面写也可以,但是为了好辨识,还是创建了吧)

    2、

      创建一个类 这个类的名称就是你自己想要序列化哪个表的名称,方式与model的创建类似

      from rest_framework impoer serializers

      class BookSerializers(serializers.Serializer):

        title = serializers.CharField()

        price= serializers.CharField()

        # 一对多字段 使用source字段来控制一对多中需要显示的内容

        publish =  serializers.CharField(source = 'publish.name')

        # 多对多字段 serializers.SerializerMethodField() 会显示 get_***的返回值  ***为我们需要查找的多对多内容名

        authors = serializers.SerializerMethodField() 

        def get_authors(self,obj):

          temp = []

          for author in obj.authors.all()

            temp.append(author.name)

          return temp

      如果想要省事,那么serializers还有一个方法  继承的是serializers.ModelSerializer类

      class BookModelSerializers(serializers.ModelSerializer):

        class Meta:

          model = Book # 你自己model的名称

          fields = "__all__"

          # 因为这种方法 会将一对多和多对多的默认值都为关联表内容的主键值,如果我们想要修改,那么就还按照上面的方法,添加进来,进行修改即可

               # 一对多字段 使用source字段来控制一对多中需要显示的内容

          publish =  serializers.CharField(source = 'publish.name')

          # 多对多字段 serializers.SerializerMethodField() 会显示 get_***的返回值  ***为我们需要查找的多对多内容名

          authors = serializers.SerializerMethodField() 

          def get_authors(self,obj):

            temp = []

            for author in obj.authors.all()

              temp.append(author.name) 

            return temp

    3、

      在views 中编写逻辑代码,继承的是APIView类

      class BookViewSet(APIView):

        def get(self,request):

          pass

        def post(self,reuqest):

          bs = BookSerializers(data=request.data,many=False)

          if bs.is_valid():  # 判断获取到的数据是否符合序列化格式

            bs.save()  # 将内容进行保存

            return Response(bs.data)

          else:

            return Response(bs.errors)

      在views里面 自己编写的代码中导入 serializer文件中的类

      from serializer import BookSerializers

      然后将内容进行序列化

      bs = BookSerializers(list1,many=True)  #many=True 是对多个字典进行序列化操作

      使用 restframework中的Response来进行renturn操作

      from rest_framework.response import Response

      return Response(bs.data)

      使用这样的返回值,如果使用浏览器进行浏览,则会显示restframework框架自己编写的一套页面进行内容返回,而我们在开发的时候,通常是前后端分离,前端人员希望请求的是Json数据,我们在模拟使用postman来请求时,则会返回JSON数据的字符串,方便调用。

  • 相关阅读:
    SpringBoot插件——EasyCode的使用(以MySQL为例)
    Springboot整合mybaties
    linux破解navicat for mysql
    springboot整合thymeleaf——引用静态资源
    整合thymeleaf
    Error: errCode: -404011 cloud function execution error | errMsg: clou……错误
    JqueryMobile与php跳转问题
    Hbuilder环境下配置php
    Bean的三种实例化方式
    利用TFTP命令上传下载H3C交换机配置文件
  • 原文地址:https://www.cnblogs.com/ifiwant/p/12573199.html
Copyright © 2011-2022 走看看