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数据的字符串,方便调用。

 

posted on 2020-03-26 11:40  请叫我山楂熊°  阅读(311)  评论(0编辑  收藏  举报

导航