一、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')

  

  

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

  1. rest-framework之序列化组件

    一:django自带序列化组件 Django内置的serializers(把对象序列化成json字符串) from django.core import serializers def test(re ...

  2. Django的restframework的序列化组件之对单条数据的处理

    之前我们学习的都是处理书籍或者出版社的所有的数据的方法,下面我们来看下处理单个书籍,或者单个出版社的方法 这个时候我们就需要重新写一个类,这个类的方法,就需要有3个参数,参数1是self,参数2是re ...

  3. rest-framework之APIView 序列化组件

    rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...

  4. day 94 RestFramework序列化组件与视图view

    一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...

  5. rest-framework框架——APIView和序列化组件

    一.快速实例 Quickstart http://www.cnblogs.com/yuanchenqi/articles/8719520.html restful协议 ---- 一切皆是资源,操作只是 ...

  6. drf 之序列化组件

    序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象. 用orm查回来的数据都是都是一个一个的对象, 但是前端要的是json格式字符串. 序列化两大功能 ...

  7. python全栈开发day99-DRF序列化组件

    1.解释器组件源码分析 https://www.processon.com/view/link/5ba0a8e7e4b0534c9be0c968 2.基于CBV的接口设计 1).django循环que ...

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

    基本使用 -序列化 -对象,转成json格式 用drf的序列化组件 -定义一个类继承class BookSerializer(serializers.Serializer): -写字段,如果不指定so ...

  9. 解析器组件和序列化组件(GET / POST 接口设计)

    前言 我们知道,Django无法处理 application/json 协议请求的数据,即,如果用户通application/json协议发送请求数据到达Django服务器,我们通过request.P ...

随机推荐

  1. 报错:(未解决)java.lang.VerifyError: Instruction type does not match stack map

    报错背景: CDH中集成kafka的服务,解决完kafka的jar包报错之后重启,发现这个报错. 报错现象: java.lang.VerifyError: Instruction type does ...

  2. Mysql8.0.17版本不能自动创建activiti表的坑

    maven项目如下: 配置好数据库,和activiti的配置之后,开始执行流程部署 package com.yuanqiao.first_activiti.deployment; import jav ...

  3. JS获当前网页元素高度offsetHeight

    本文测试的是offsetHeight,获取网页中某元素的高度,单位是像素,获取的类型是整型,可以进行数字运算.如图,网页中的元素本身的高度包括,自身的内容+padding+border,而margin ...

  4. android基础---->传感器的使用

    现在每部Android 手机里面都会内置有许多的传感器,它们能够监测到各种发生在手机上的物理事件,而我们只要灵活运用这些事件就可以编写出很多好玩的应用程序.今天我们开始简单的传感器使用的学习. 目录导 ...

  5. vue中使用animate.css实现动画

    参考链接:https://www.cnblogs.com/ccyinghua/p/7872694.html 参考链接:https://www.jianshu.com/p/2e0b2f8d40cf 使用 ...

  6. Python数据挖掘之随机森林

    主要是使用随机森林将four列缺失的数据补齐. # fit到RandomForestRegressor之中,n_estimators代表随机森林中的决策树数量 #n_jobs这个参数告诉引擎有多少处理 ...

  7. [转帖]运维必读:Linux 的内存分页管理

    运维必读:Linux 的内存分页管理 https://cloud.tencent.com/developer/article/1356431 内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在 ...

  8. python爬虫-豆瓣电影的尝试

    一.背景介绍 1. 使用工具 Pycharm 2. 安装的第三方库 requests.BeautifulSoup 2.1 如何安装第三方库 File => Settings => Proj ...

  9. Python23之内置函数filter()和map()

    首先我们了解一个概念:迭代 迭代是访问集合元素的⼀种⽅式.迭代器是⼀个可以记住遍历的位置的对象.迭代器对象从集合的第⼀个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 我们已经知道 ...

  10. django使用pyecharts(5)----django加入echarts_增量更新_定长

    五.Django 前后端分离_定时增量更新图表定长数据 1.安装 djangorestframework linux pip3 install djangorestframework windows ...