RestFramework之序列化组件

一、restframework的序列化组件的使用

  1.导入序列化组件与模型类

from rest_framework import serializers
from app01.models import (
    Book,
    Author,
    Publish
)

  2.书写序列化类

  

# 创建一个序列化类

class BookSerializer(serializers.Serializer):
    ‘‘‘
    开始使用序列化
        - 导入模块:from rest_framework import serializers
        - 建立一个序列化类
            class BookSerializer(serializers.Serializer):
            字段可以自定义
        - 获取queryset
            origin_data = Book.objects.all()
        - 开始序列化
            serialized_data = BookSerializer(origin_data, many=True)
        - 获取序列化后的数据,返回给客户端
            return Response(serialized_data.data)
    ‘‘‘
    title = serializers.CharField(max_length=32)
    price = serializers.DecimalField(max_digits=5,decimal_places=2)
    publish = serializers.CharField(max_length=32)

    # 多对多字段需要自己手动获取数据,SerializerMethodField()
    author_list = serializers.SerializerMethodField()

    def get_author_list(self,obj):
        ‘‘‘
        处理多对多关系
        :param obj: Book对象
        :return:
        ‘‘‘
        #定义作者列表对象
        author_list =list()
        # print(obj.authors.all())
        for author in obj.authors.all():
            author_list.append(author.name)
        return author_list

    def create(self, validated_data):
        # {‘title‘: ‘Python666‘, ‘price‘: Decimal(‘66.00‘), ‘publish‘: ‘2‘}
        validated_data[‘publish_id‘] = validated_data.pop(‘publish‘)

        book = Book.objects.create(**validated_data)

        return book
# 基于ModelSerializer书写的序列化类
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ‘__all__‘
        extra_kwargs={
            ‘publish‘:{‘write_only‘:True},
            ‘authors‘:{‘write_only‘:True}
        }
    publish_name = serializers.CharField(max_length=32,source=‘publish.name‘,read_only=True)
    publish_place = serializers.CharField(max_length=32,source=‘publish.place‘,read_only=True)

    author_list = serializers.SerializerMethodField()

    def get_author_list(self,obj):
        author_list=[]
        for author in obj.authors.all():
            author_list.append(
                author.name
            )
        return author_list

  3.视图中的用法

    首先也是要导入restframework中封装view的APIview与响应方式

from rest_framework.views import APIView
from rest_framework.response import Response

    然后书写视图类

class BookListView(APIView):
    # 获取全部
    def get(self,request):
        ‘‘‘
        1.获取queryset对象
        2.开始序列化,给序列化类传值(quertset)
        3.返回Response(.data)
        :param request:
        :return:
        ‘‘‘
        data = Book.objects.all()
        serializer_data = BookSerializer(data,many=True)
        return Response(serializer_data.data)
    # 添加
    def post(self,request):
        bs = BookSerializer(data=request.data)
        print(bs)
        if bs.is_valid():
            book = bs.save()
            authors = Author.objects.filter(id__in=request.data[‘authors‘])
            book.authors.add(*authors)
            return Response(bs.data)
        else:
            return Response(bs.errors)

class BookFileView(APIView):
    # 获取一条
    def get(self,request,pk):
        book_obj = Book.objects.get(pk=pk)
        bs = BookSerializer(book_obj ,many=False)
        return Response(bs.data)
    # 修改
    def put(self,request,pk):
        book_obj = BookSerializer(pk=pk)
        bs = BookSerializer(data=request.data,instance=book_obj)
        if bs.is_valid():
            bs.save()
            return Response(bs.data)
        else:
            return Response(bs.errors)
    # 删除
    def delete(self,request,pk):
        Book.objects.get(pk=pk).delete()
        return Response(‘Delete operation successfully‘)

  

  

原文地址:https://www.cnblogs.com/qq631243523/p/10084134.html

时间: 2024-11-05 22:52:23

RestFramework之序列化组件的相关文章

第三章 restframework——序列化组件

第三章 restframework--序列化组件 一.django自带的序列化组件serializers 二.restframework的序列化组件Serializer 三.restframework的序列化组件ModelSerializer 四.restframework的序列化组件请求数据校验和保存功能(钩子) 五.restframework的序列化组件源码分析 一.django自带的序列化组件serializers from django.core import serializers d

Restful framework【第三篇】序列化组件

基本使用 -序列化 -对象,转成json格式 用drf的序列化组件 -定义一个类继承class BookSerializer(serializers.Serializer): -写字段,如果不指定source,字段名必须跟数据库字段名对应(source指定的值跟字段名不能重复) -source还可以指定方法 -publish=serializers.SerializerMethodField() def get_publish(self,obj): obj.publish #obj.author

RESTFULL 02 序列化组件

RESTFULLL 序列化组件 一.Django自带序列化组件 ? 内置的serializers(把对象序列化成json字符串)(一般不用) from django.core import serializers def test(request): book_list = Book.objects.all() ret = serializers.serialize("json", book_list) return HttpResponse(ret) 二.rest-framework

基于Django的Rest Framework框架的序列化组件

本文目录 一 Django自带序列化组件 二 rest-framework序列化之Serializer 三 rest-framework序列化之ModelSerializer 四 生成hypermedialink(极少数) 五 序列化组件之请求数据校验和保存功能 序列化组件源码分析 回到目录 一 Django自带序列化组件 详见 回到目录 二 rest-framework序列化之Serializer models部分: from django.db import models # Create

rest-framework框架基本组件

一.快速实例 Quickstart http://www.cnblogs.com/yuanchenqi/articles/8719520.html 二.序列化 1.准备模型和路由 from django.db import models # Create your models here. class Book(models.Model): title = models.CharField(max_length=32) price = models.IntegerField() pub_date

RestFramework之权限组件

一,RestFramework之权限组件源码解析 restframework的权限组件与认证组件源码类似,都需要我们自己写一个类,然后放在 permission_classes中,或者全局settings中配置: 我们直接看在dispatch()中的权限组件部分干了什么. def initial(self, request, *args, **kwargs): """ Runs anything that needs to occur prior to calling the

Serializers 序列化组件

为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到的数据进行序列化. 接下来我们看下django序列化和rest_framework序列化的对比~~ Django的序列化方法 # 第一版 用values以及JsonResponse实现序列化(发现就简单的数据拿出来还这么费劲) class BookView(View): def get(self,

DRF-->2序列化组件的使用和接口设计--get,post,put,delete&优化组件

!!!!! !!!!! 记住这个图 !!!!! 上篇博客说道DRF序列化组件的get,只是简单的举一个实例,然而在现实生活中我们前后端进行交互的时候更多的用到了Json数据格式,这也就是说前后端交互的时候用到的更多序列化,但同时也会有大量的重复性的代码,举个简单的例子,就上片博客---get请求的时候,只是一个简单的get请求,还有put,updata,post,delete请求的时候呢,代码没有任何的优化,在这里我们再来说一下序列化和代码优化的结合,以供后来人参考,不多说直接上代码 1.这里我

RESTful【第三章】:序列化组件的使用及接口设计

序列化组件的使用及接口设计 一.Django原生的serializer(序列化) 使用步骤: 1.导入模块 from django.core.serializers import serialize 2.获取queryset 3.对queryset进行序列化 4.将序列化后的数据,响应给客户端 实例: #1.导入Django自带的原生的序列化模块 from django.core.serializers import serialize class CourseView(APIView): de