#url.py
url(r'^customer/$', views.CustomerView.as_view()), #查询所有数据、添加数据接口url
url(r'^customer/(\d+)', views.SCustomerView.as_view()), #查询、更新、删除单个数据接口url
from app01.models import *
from rest_framework import serializers
from rest_framework.response import Response
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model=Customer
# field=["name","gender"]
fields="__all__"
# courses=serializers.SerializerMethodField()
# def get_courses(self,obj):
# ret=[]
# for i in obj.courses.all():
# ret.append({"name":"i.name"})
# return ret

#查所有的数据、添加数据接口
from rest_framework.views import APIView
class CustomerView(APIView):
def get(self,request):
customer_list=Customer.objects.all()
cs=CustomerSerializer(customer_list,many=True)
return Response(cs.data)
def post(self,request):
cs=CustomerSerializer(data=request.data,many=False)
if cs.is_valid():
cs.save()
return Response(cs.data)
else:
return Response(cs.errors) #查询、删除、更新单个数据接口,新建类SCustomerView
#当使用http://127.0.0.1:8055/customer/1访问时不报错,那是浏览器自动补全了"/",
在setting中添加APPEND_SLASH=False就不会加"/"
class SCustomerView(APIView):
def get(self,request,id):
edit_obj=Customer.objects.get(pk=id)
cs=CustomerSerializer(edit_obj,many=False) #many=False 只查询一条数据
return Response(cs.data) def put(self,request,id):
edit_obj=Customer.objects.get(pk=id)
cs=CustomerSerializer(data=request.data,instance=edit_obj) #序列化一个对象使用instance=edit_obj,
                                          序列化列表直接写入列表即可
if cs.is_valid():
cs.save() # edit_obj.update(request.data)
return Response(cs.data)
else:
return Response(cs.errors)
def delete(self,request,id):
eidt_obj=Customer.objects.get(pk=id).delete()
return Response("") #按照restful规范,删除返回 "" 即可

需求:当有很多表时,不可能一个一个的写增删改查,使用mixins解决了这个:

  mixins里封装了增删改查功能,但是需要继承APIView,APIView已经被封装在了generics里,调用Generics即可

序列化多表功能最终版代码

#url.py
#序列化school
url(r'^school/$', views.SchoolView.as_view()),
url(r'^school/(?P<pk>\d+)', views.SSchoolView.as_view()), #做单个数据差、更新、删时,要传入pk值,
                                       使用有名分组 (?P<pk>\d+)
#views.py
from rest_framework.mixins import ListModelMixin,CreateModelMixin,UpdateModelMixin,
                                        DestroyModelMixin,RetrieveModelMixin
from rest_framework.generics import GenericAPIView
class SchoolSerializer(serializers.ModelSerializer): #可以将这个组件封装到serializer.py文件,导入就行
class Meta:
model=School
fields="__all__" #做整体数据的查询接口、添加数据接口
class SchoolView(ListModelMixin,CreateModelMixin,GenericAPIView):
queryset = School.objects.all() #只需要变动两个字段,qyeryset、序列化组件名儿,必须按照这种格式写!
serializer_class = SchoolSerializer
def get(self, request, *args, **kwargs): #点开ListModelMixin,有个list方法,里边的参数copy过来即可
return self.list(request, *args, **kwargs) #返回self.方法名儿() def post(self, request, *args, **kwargs): #点开CreateModelMixin,有个create方法,里边的参数copy过来即可
return self.create(request, *args, **kwargs) # 做单个数据的,查、删、更新接口
class SSchoolView(UpdateModelMixin,RetrieveModelMixin,DestroyModelMixin,GenericAPIView):
queryset = School.objects.all()
serializer_class = SchoolSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)

AI-序列化-做五个数据接口的更多相关文章

  1. 结合docker做flask+kafka数据接口与压力测试

    一.需求 需要做实时数据接入的接口.数据最终要写入库,要做到高并发,数据的完整,不丢失数据. 二.技术选型 1.因为只是做简单的接口,不需要复杂功能,所以决定用flask这个简单的python框架(因 ...

  2. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...

  3. 利用php的序列化和反序列化来做简单的数据本地存储

    利用php的序列化和反序列化来做简单的数据本地存储 如下程序可以做为一个工具类 /** * 利用php的序列化和反序列化来做简单的数据本地存储 */ class objectdb { private ...

  4. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  5. 第一百五十九节,封装库--JavaScript,表单序列化结合ajax提交数据

    封装库--JavaScript,表单序列化结合ajax提交数据 封装库,表单序列化方法 /** xu_lie_biao_dan()方法,表单序列化方法,将自动获取指定表单里面的各项字段name值和va ...

  6. Android系统的五种数据存储形式(二)

    之前介绍了Android系统下三种数据存储形式,今天补充介绍另外两种,分别是内容提供者和网络存储.有些人可能认为内存提供者和网络存储更偏向于对数据的操作而不是数据的存储,但这两种方式确实与数据有关,所 ...

  7. 序列化组件(get/put/delete接口设计),视图优化组件

    一 . 知识点回顾 1 . 混入类 , 多继承 class Animal(object): def eat(self): print("Eat") def walk(self): ...

  8. ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成

    一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...

  9. [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类

    [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...

随机推荐

  1. Discuz!X 3.4 前台任意文件删除漏洞复现

    Discuz!X 3.4 前台任意文件删除漏洞复现 参考链接: http://www.freebuf.com/vuls/149904.html http://www.freebuf.com/artic ...

  2. Polish Extraction Zone

    声明贴花组件 UPROPERTY(VisibleAnywhere, Category = "Components") UDecalComponent* DecalComp; 添加头 ...

  3. MySql 在cmd下的学习笔记 —— 有关多表查询的操作(内连接,外连接,交叉连接)

    mysql> create table test5( -> id int, ) -> )engine myisam charset utf8; Query OK, rows affe ...

  4. python,类和对象(二),self 、__init__(self,param[,param...])、__private(私有变量)

    当我们在类中定义方法的时候,总会看到会第一个参数总是self,是的这个是python的一个语法,他相当于这个对象的指针. class Dog(): def setName(self,name): se ...

  5. CentOS 7 安装配置 Vsftpd

    https://blog.imzhengfei.com/centos-an-zhuang-pei-zhi-vsftpd/ vsftpd 是“very secure FTP daemon”的缩写,是一款 ...

  6. springboot多模块开发以及整合dubbo\zookeeper进行服务管理

    之前研究了springboot单工程的使用,参考git地址:https://github.com/qiao-zhi/springboot-ssm 下面研究springboot多模块开发的过程. 1.模 ...

  7. OpenStack实践系列⑦深入理解neutron和虚拟机

    OpenStack实践系列⑦深入理解neutron和虚拟机 五.深入理解Neutron 5.1 虚拟机网卡和网桥 [root@node1 ~]# ifconfig brq65c11cc3-8e: fl ...

  8. Golang -- Signal处理

    我们在生产环境下运行的系统要求优雅退出,即程序接收退出通知后,会有机会先执行一段清理代码,将收尾工作做完后再真正退出.我们采用系统Signal来 通知系统退出,即kill pragram-pid.我们 ...

  9. kali sudo apt install 无法定位软件包

    在etc/apt   的sources.list 添加镜像源 debhttp://http.kali.org/kali kali-rolling main non-free contrib 或 deb ...

  10. MS SQL Server 增删改查

    数据插入 语法:INSERT INTO Table_name(field1,field2……fieldN) values(value1,vlaue2,…valueN) 单行插入用户类型 INSERT ...