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 ...
随机推荐
- 【Leetcode_easy】892. Surface Area of 3D Shapes
problem 892. Surface Area of 3D Shapes 题意:感觉不清楚立方体是如何堆积的,所以也不清楚立方体之间是如何combine的.. Essentially, compu ...
- 洛谷 题解 UVA247 【电话圈 Calling Circles】
[题意] 如果两个人互相打电话(直接或者间接),则说他们在同一个电话圈里.例如,\(a\)打给\(b\),\(b\)打给\(c\),\(c\)打给\(d\),\(d\)打给\(a\),则这四个人在同一 ...
- Spring MVC <mvc:annotation-driven/>的作用
一.mvc:annotation-driven的作用 Spring 3.0.x中使用了mvc:annotation-driven后,默认会帮我们注册默认处理请求,参数和返回值的类,其中最主要的两个类: ...
- Python循环的基本使用(for in、while)
Python的循环有两种: 一种是for-in 循环:主要用于遍历tuple.list; 一种是while循环:只要条件满足,就不断循环,条件不满足时退出循环. #!/usr/bin/python # ...
- PAT(B) 1071 小赌怡情(Java)
题目链接:1071 小赌怡情 (15 point(s)) 题目描述 常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大 ...
- C++中的构造函数与析构函数及组合类的调用
// 构造函数与析构函数及类的组合 #include "stdafx.h"#include <iostream>using namespace std; //枚举enu ...
- LOJ3049 [十二省联考2019] 字符串问题 【后缀自动机】【倍增】【拓扑排序】
题目分析: 建出后缀自动机,然后把A串用倍增定位到后缀自动机上,再把B串用倍增定位到后缀自动机上. SAM上每个点上的A串根据长度从小到大排序,建点,依次连边. 再对于SAM上面每个点,连到儿子的边, ...
- 查看php和apache配置成功的方法
PHP配置文件是php.ini 检查php是否配置成功,在wamp/www根目录写一个phpinfo.php文件,内容为 <?php phpinfo(); ?> 然后可以打开网页输入l ...
- AJAX 调用WebService 、WebApi 增删改查
WebService 页面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 3 ...
- 使用Jenkins的Git Parameter插件来从远程仓库拉取指定目录的内容
更换插件安装源 系统管理---插件管理---高级---升级站点,把默认的插件下载地址换成下面这个: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updat ...