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

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. DeepLearning.ai-Week1-Convolution+model+-+Step+by+Step

    1 - Import Packages import numpy as np import h5py import math import matplotlib.pyplot as plt %matp ...

  2. Javascript - ExtJs - TreePanel组件

    TreePanel组件(Ext.tree.TreePanel)logogram:Ext.tree.Panel | xtype:treepanel 树与节点 树面板组件的根是源头,从根上拓展出其它的子节 ...

  3. shell编程 之 函数

    1 函数基本格式 个人认为,编程中的函数基本上有3种,第一种是糖葫芦函数,一根棒棒串起来,执行一次就是走个过场,吃完了糖葫芦就没别的事了,第一种基本就是这样的: 它没有参数,没有返回值. demoFu ...

  4. 线程变量---ThreadLocal类

    用处:保存线程的独立变量.对一个线程类(继承自Thread) 思想:如果一个资源会引起线程竞争,那就为每一个线程配置一个资源.相比于synchronized是一种空间换时间的策略 当使用ThreadL ...

  5. OGG-01668

    ERROR   OGG-03517  Oracle GoldenGate Delivery for Oracle, test.prm:  Conversion from character set U ...

  6. 为什么要重写equals和hashcode方法

    equals hashcode  当新建一个java类时,需要重写equals和hashcode方法,大家都知道!但是,为什么要重写呢? 需要保证对象调用equals方法为true时,hashcode ...

  7. ARMV7-M数据手册---Part B :System Level Architecture---B3 System Address Map

    1.前言 2.The system address map 3.System Control Space (SCS) 4.The system timer, SysTick 5. Nested Vec ...

  8. Delphi 实现自动更新

    Delphi 通用程序自动更新升级:http://www.delphitop.com/html/wangluo/2968.html https://www.cnblogs.com/hnxxcxg/p/ ...

  9. C# 基础之string[,] 和string[][]

    昨天做项目时碰到一个问题,后台返回一张关系表,里面就两个字段,简化为A,B字段(1:N的关系),一个A对应多个B字段. 由于对于string[,] 和string[][] 的认识不到位,刚开始搞错了数 ...

  10. Unity3D Shader 入门

    什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这 ...