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

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. python - 代码练习 - 差异备份/同步更新

    差异备份以及文件同步: import os import filecmp import shutil import re # 差异增量更新,dir2 文件目录 与 dir1 文件目录更新, def a ...

  2. synchronized与Lock的区别与使用

    1.ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象obj的锁定,假设A获取了对象obj锁,B将等待A ...

  3. 关于 tp5.0 阿里云 oss 上传文件操作

    tp5.0 结合阿里云oss 上传文件 1.引入 oss 的空间( composer install 跑下第三方拓展包及核心代码包) 备注:本地测试无误,放到线上有问题  应该是移动后的路劲(相对于服 ...

  4. canvas贪吃蛇游戏

    用canvas做了一个贪吃蛇小游戏 开始界面 游戏界面 结束界面 <!DOCTYPE html>  <html>  <head>  <meta charset ...

  5. 【ARTS】01_14_左耳听风-20190211~20190217

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. React的Element的创建和render

    React的Element是React应用程序的最小构建块,它是用来描述我们在屏幕上看到的浏览器页面上的内容. 在React中构建 Element 有两种方式: 1.JSX的方式,JSX不是React ...

  7. 深入理解 sudo 与 su 之间的区别【转】

    深入理解 sudo 与 su 之间的区别 两个命令的最大区别是: sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码.另外一个区别是其默认行为.sudo 命令只允许使用提升 ...

  8. boost.lexical_cast 学习

    1,字符串 到 数值类型的转换 2,数值 到 字符串的转换 3,异常处理情况 4,boost::lexical_cast 的原型: template<typename Target, typen ...

  9. shell 学习之if语句

    bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式:    [ expression ]  括号两端必须要有空格    [[ expres ...

  10. Spring 邮件发送

      前言:以前都是直接用Java自带的邮件工具发送邮件,现在Spring帮我们做了封装,提供了更好用更简单的发送邮件工具JavaMailSender 关于邮件服务器的设置就不在这里说了,直接去QQ邮箱 ...