#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. C/C++ 内存对齐原则及作用

    struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储 ...

  2. Navicat for MySQL 12中文版 破解流程

    1.下载  Keygen_Patch 软件 下载地址 pass: saxz 2.启动 Keygen_Patch 软件 3.提示破解成功了,先别着急 4.运行 Navica  软件,输入注册码 5.断网 ...

  3. Hadoop Steaming开发之WordCount

    简单的WordCount栗子--类似于编程语言中的hello world 1.shell脚本run.sh HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bi ...

  4. Python3学习笔记28-HtmlTestRunner

    HtmlTestRunner是unittest模块下的一个拓展,用来生成测试报告.原生的可以自己找下下载地址,原生的看着比较丑.这次使用的是经过一些大佬优化之后的.具体GitHub地址:https:/ ...

  5. 利用C#进行AUTOCAD的二次开发

    众所周知,对AutoCAD进行二次开发用到的主要工具有:ObjectArx,VBA,VLisp.但它们的优缺点是显而易见的:ObjectArx功能强大,编程效率高,但它的缺点是编程者必须掌握VC++, ...

  6. aix安装nmon

    aix5310以上都系统自带了nmon,其他低版本需要手动安装 软件包下载地址https://www.ibm.com/developerworks/community/wikis/home?lang= ...

  7. Efuse--芯片存储

    1.Efuse是什么 Efuse类似于EEPROM,是一次性可编程存储器,在芯片出场之前会被写入信息,在一个芯片中,efuse的容量通常很小,一些芯片efuse只有128bit. 2.efuse的作用 ...

  8. 【OpenCV】SIFT原理与源码分析:DoG尺度空间构造

    原文地址:http://blog.csdn.net/xiaowei_cqu/article/details/8067881 尺度空间理论   自然界中的物体随着观测尺度不同有不同的表现形态.例如我们形 ...

  9. Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...

    题意简介 题目就是叫你找两个不重合的非空区间,使得这两个区间里的数异或后相加的和最大 (看到异或,没错就决定是你了可持久化trie!) 思路 水一波字典树,莫名觉得这题可持久化能过,于是水了一发挂了, ...

  10. TCP、消息分包和协议设计

    TCP是一种流式协议 TCP是一种面向连接的.可靠的.基于字节流的传输层通信协议. 流式协议的特点是什么?就像流水连续不断那样,消息之间没有边界.例如send了3条消息(这里的“消息”是指应用层的一个 ...