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 ...
随机推荐
- Input.GetMouseButtonDown 在fixedupdate中会出现丢失问题,在update中则完全没这个问题
Input.GetMouseButtonDown 在fixedupdate中会出现丢失问题,在update中则完全没这个问题
- matlab绘制直方图的方法
直接上代码,利用hist绘制频次直方图和频率直方图... %rand Fs=1000;N=10000; t=0:1/Fs:(N-1)/Fs; X1=rand(1,length(t)); subplot ...
- HashMap的key存储对象需要注意哪些
HashMap的key最好不要存储对象,大部分环境都是String. 如果要存储对象,要注意重写下equal和hashcode方法!!
- Suspended Animation——《The Economist》阅读积累(考研英语二·2010 Reading Text 1)
[知识小百科] Damien Hirst(达米恩●赫斯特):生于1965年,是新一代英国艺术家的主要代表人物之一.他主导了90年代英国艺术发展并享有很高的国际声誉.赫斯特在1986年9月就读于伦敦大学 ...
- transform-transition-animation(2)
transform transform : none | <transform-function> [ <transform-function> ]* 也就是: transfo ...
- Pytorch 网络结构可视化
安装 conda install graphvizconda install tensorwatch 载入库 import sysimport torchimport tensorwatch as t ...
- Session中清除对象方法比较
转载. https://blog.csdn.net/u014401141/article/details/51816308 Session中清除对象方法比较 http://blog.csdn.ne ...
- Git master合并分支时提示“Already up-to-date”
Git master合并分支时提示"Already up-to-date" 在使用Git把当前分支合并到master提示"Already up-to-date&quo ...
- 长乐培训Day7
T1 删除 题目 [题目描述] 现在,我的手上有 n 个数字,分别是 a1,a2,a3,...,an. 我现在需要删除其中的 k 个数字.当然我不希望随随便便删除,我希望删除 k 数字之后,剩下的 n ...
- 剑指offer27:按字典序打印出该字符串中字符的所有排列
1 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: ...