序列化最终代码(下边的可以不看)

from rest_framework.views import APIView
from rest_framework import serializers
from rest_framework.response import Response
from app01.models import Book class BookSerializer(serializers.ModelSerializer): #ModelSerializer可以将指定的表里所有数据展示出来
class Meta:
model=Book #定义需要传输的数据的表
# fields=["title","price"] 可以指定传送的字段
fields="__all__" #传送表Book所有数据 #如果前端需要的不是书籍id而是数据名称,加这个即可!
# publish=serializers.CharField(max_length=32,source="publish.name")
authors=serializers.SerializerMethodField()
def get_authors(self,obj):
ret=[]
for i in obj.authors.all():
ret.append({"name":i.name,"pk":i.pk})
return ret class BookView(APIView): def get(self,request):
book_list=Book.objects.all()
serializer=BookSerializer(book_list,many=True)
return Response(serializer.data) def post(self,request):
serializer=BookSerializer(data=request.data,many=False) #默认为False if serializer.is_valid():
serializer.save() # create操作 return Response(serializer.data) #拿到数据
else:
return Response(serializer.errors) #报错提醒

序列化完整版的解释

一个表多个正常字段的处理

一个表中如果有多个字段,不能使用course.desc这种方式来传数据,太麻烦了!所以使用drf的序列化组件!

做GET接口:


from rest_framework.response import Response  # Response和httpresponse一样,增加了数据结构化
from rest_framework import serializers
class CourseSerializer(serializers.Serializer):
title=serializers.CharField(max_length=32) #增加了认证功能
desc=serializers.CharField(max_length=32)
class Courseview(APIView): def get(self,request): # 使用序列化传数据
course_list=Course.objects.all()
cs=CourseSerializer(course_list,many=True)
#如果有多个字段,不可能使用course.desc这种方式,需要序列化简便!
print(cs.data) #序列化接口
return Response(cs.data) #我的序列化接口

效果:(使用response结构化、使用序列化组件后的数据)

  

做POST请求:

    def post(self,request):

        print(request.data)
cs=CourseSerializer(data=request.data) #默认many=False
if cs.is_valid(): #校验
Course.objects.create(**request.data) #在数据库中添加数据
return Response(cs.data) #序列化数据
else:
return Response(cs.errors) # 序列化错误信息

添加数据后效果:

一个表不同类型字段的处理

from rest_framework.views import APIView
from rest_framework import serializers
from rest_framework.response import Response
from app01.models import Book class BookSerializer(serializers.Serializer): title = serializers.CharField( max_length=32)
price =serializers.DecimalField(max_digits=5,decimal_places=2) # 一对多字段
publish_email=serializers.CharField(max_length=32,source="publish.email")
publish_name=serializers.CharField(max_length=32,source="publish.name") # 多对多字段
#authors=serializers.CharField(max_length=32,source="authors.all")
authors=serializers.SerializerMethodField()
def get_authors(self,obj):
ret=[]
for i in obj.authors.all():
ret.append(i.name)
return ret
class BookView(APIView):

    def get(self,request):
book_list=Book.objects.all()
serializer=BookSerializer(book_list,many=True)
return Response(serializer.data)

AI-序列化-查-做接口的更多相关文章

  1. vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口

    菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但 接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是pyt ...

  2. 使用静态函数impl模式做接口

    使用静态函数impl模式做接口 impl即桥接模式,主要是为了隐藏数据和减少不必要的编译. 普通的impl模式做接口一般是: A类是接口,B类继承A类,是A类的实现,C类,包含A类和B类的头文件,把B ...

  3. 做接口自动化时候,一些登录头信息可以通过aop的方式进行增强

    做接口自动化时候,一些登录头信息可以通过aop的方式进行增强

  4. 采用太平洋AI集装箱箱号识别接口实现集装箱箱号识别

    识别 示例图片 1 太平洋AI集装箱箱号识别接口(文档下方有详细操作指南) 1.1 接口一:提交base64格式的图片 地址:http://218.1.125.60:88/container_num_ ...

  5. Hadoop序列化与Writable接口(二)

    Hadoop序列化与Writable接口(二) 上一篇文章Hadoop序列化与Writable接口(一)介绍了Hadoop序列化,Hadoop Writable接口以及如何定制自己的Writable类 ...

  6. Hadoop序列化与Writable接口(一)

    Hadoop序列化与Writable接口(一) 序列化 序列化(serialization)是指将结构化的对象转化为字节流,以便在网络上传输或者写入到硬盘进行永久存储:相对的反序列化(deserial ...

  7. RobotFramework做接口自动化(内部接口需要登录token)

    背景: 项目中需要做接口自动化测试,使用robot,有一个收货地址列表的接口直接传参数访问时会返回:{"msg":"缺少参数","code" ...

  8. windows下openresty中使用lua做接口转发、二次封装等

    需求:根据客户需求,可以在ngx下 通过lua做接口二次封装再次转发给用户或第三方 场景:对返回值有要求的.接口屏蔽字段.或做一些业务上的验证等 1.windows直接下载openresty 解压即可 ...

  9. robotframework - 框架做接口自动化post请求

    1.做get请求之前先安装 Request库,参考github上链接 :https://github.com/bulkan/robotframework-requests/#readme 2.请求&a ...

随机推荐

  1. Aizu 2170 Marked Ancestor

    题意:出一颗树,有两种操作:1. mark  u  标记结点u2.query  u  询问离u最近的且被标记的祖先结点是哪个让你输出所有询问的和. 思路:数据量太小,直接暴力dfs就可以了 #incl ...

  2. python模块-----time

    说明 time模块提供各种时间相关的功能 与时间相关的模块有:time,datetime,calendar 这个模块的功能不是适用于所有的平台 这个模块中定义的大部分函数是调用C平台上的同名函数实现 ...

  3. [Kubernetes]CentOS7下Etcd集群搭建

    Etcd简要介绍 Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息 Etcd构建自身高可用集群主要有三种形式: ①静态发现: 预先已知 Etcd 集 ...

  4. C#基础巩固之属性

    平常写代码,类中最长用到的字段,属性,方法.虽然经常用属性,但是对属性的认知只是停留在{get;set;}上,也知道可以逻辑判断,只读什么的,没有深入研究: 此篇随笔用来做做属性的文章,加深下认知,文 ...

  5. 游记-NOIP2018

    Day -3 受蛊惑跑到理工大去试机,意外发现home里的noilinux账户下有个压缩包,而且还试对了密码,怀着 激动 紧张的心情,打开来看,里面写着 (写出来我就会被禁赛了): asdfasdra ...

  6. windows的tasklist使用

    获取进程信息 tasklist # tasklist |findstr java.exe 杀死进程 方式1,通过进行pid杀死: taskkill /pid 4612 /f 方式2,通过名称杀死: t ...

  7. Ex 2_34 线性3SAT..._第四次作业

  8. linux杀死僵尸进程

    用下面的命令找出僵死进程 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 命令注解: -A 参数列出所有进程 -o 自定义输出字段 我们设定显示字段为 sta ...

  9. Affiliate实战记录之一:CPI、CPA、CPM...名词解释

    1.CPM (Cost Per Mille,或者Cost Per Thousand;Cost Per Impressions) 每千人成本,按展示次数收费 网上广告收费最科学的办法是按照有多少人看到你 ...

  10. 初步了解three.js

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...