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')
RestFramework之序列化组件的更多相关文章
- rest-framework之序列化组件
一:django自带序列化组件 Django内置的serializers(把对象序列化成json字符串) from django.core import serializers def test(re ...
- Django的restframework的序列化组件之对单条数据的处理
之前我们学习的都是处理书籍或者出版社的所有的数据的方法,下面我们来看下处理单个书籍,或者单个出版社的方法 这个时候我们就需要重新写一个类,这个类的方法,就需要有3个参数,参数1是self,参数2是re ...
- rest-framework之APIView 序列化组件
rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...
- day 94 RestFramework序列化组件与视图view
一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...
- rest-framework框架——APIView和序列化组件
一.快速实例 Quickstart http://www.cnblogs.com/yuanchenqi/articles/8719520.html restful协议 ---- 一切皆是资源,操作只是 ...
- drf 之序列化组件
序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象. 用orm查回来的数据都是都是一个一个的对象, 但是前端要的是json格式字符串. 序列化两大功能 ...
- python全栈开发day99-DRF序列化组件
1.解释器组件源码分析 https://www.processon.com/view/link/5ba0a8e7e4b0534c9be0c968 2.基于CBV的接口设计 1).django循环que ...
- Restful framework【第三篇】序列化组件
基本使用 -序列化 -对象,转成json格式 用drf的序列化组件 -定义一个类继承class BookSerializer(serializers.Serializer): -写字段,如果不指定so ...
- 解析器组件和序列化组件(GET / POST 接口设计)
前言 我们知道,Django无法处理 application/json 协议请求的数据,即,如果用户通application/json协议发送请求数据到达Django服务器,我们通过request.P ...
随机推荐
- 【430】BST and Splay Tree
参考:Hello, Splay! 目录: 1. Binary Search Tree 2. Splay Tree
- 宣化上人:大佛顶首楞严经四种清净明诲浅释(6-7)(转自学佛网:http://www.xuefo.net/nr/article23/230700.html)
大佛顶首楞严经四种清净明诲浅释(6) 唐天竺·沙门般剌密帝译 宣化上人主讲 一九八三年四月十七日晚讲于万佛圣城 是故阿难!若不断杀修禅定者,譬如有人,自塞其耳,高声大叫,求人不闻,此等名为欲隐弥露.清 ...
- 【NANO】引脚说明
http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=489650&page=1
- 【ARTS】01_42_左耳听风-201900826~201900901
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- openpyxl,xlrd,win32com,wxpython,logging
目录 一. openpyxl常用操作总结 二. xlrd常用操作总结 三. win32com常用操作总结 四. 自定义异常 五. 判断中文 六. Excel数字字母转换 七. 使用wxpython进行 ...
- SQL在线自助查询
数据的日常查询统计分析是高频的需求,然而生产数据库由于安全.管理等方面的要求,仅仅对部分人员开发,例如DBA,总监等, 其他人员都要通过DBA才能查询数据,十分不便. 为了让DBA免于日常繁琐的工作, ...
- Java注解-注解处理器、servlet3.0|乐字节
大家好,我是乐字节的小乐,上次给大家带来了Java注解-元数据.注解分类.内置注解和自定义注解|乐字节,这次接着往下讲注解处理器和servlet3.0 一.注解处理器 使用注解的过程中,很重要的一部分 ...
- linux的fcntl函数
fcntl可实现对指定文件描述符的各种操作,例如获取/设置 文件的是否可以被读写的状态,等其他状态. int fcntl (int __fd, int __cmd, ...);The remainin ...
- Python24之递归和迭代
一.递归的含义及一些用途 递归就是函数通过return语句实现自己调用自己的过程,基本上所有的程序语言都有递归算法,常有人说(’一般程序员使用迭代,天才程序员使用递归‘),汉诺塔游戏.谢尔宾斯基三角形 ...
- Redis--hash类型操作命令
哈希类型hash redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象 哈希类型hash——基本命令 hset /hget /hms ...