#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. Nginx系列1:ubuntu16.04编译出适合自己的nginx服务器

    1.下载nginx nginx官网:nginx.org tar.gz文件 解压缩命令: wget https://nginx.org/download/nginx-1.14.2.tar.gz #下载n ...

  2. 【运维】浪潮服务器一块硬盘显示红色Offline(或者Failed)解决办法

    [写在前面]           最近服务器不知道为什么总是出现故障,以前戴尔服务器硬盘出现故障,也就是说硬盘旁边的灯显示为红色的时候,一般情况下都是表示硬盘坏掉了,直接买一块新的硬盘,将坏掉的硬盘拿 ...

  3. Faster_RCNN 3.模型准备(下)

    总结自论文:Faster_RCNN,与Pytorch代码: 本文主要介绍代码第二部分:model/ , 首先分析一些主要理论操作,然后在代码分析里详细介绍其具体实现. 首先在参考文章的基础上进一步详细 ...

  4. Python-列表的常用操作

    #先定义一个列表 names = ["ZhangXueyou","LiMing","GuoFucheng","LiuDehua&q ...

  5. dubbo源码分析3——SPI机制中的ExtensionLoader类的objectFactory属性分析

    ExtensionLoader类是整个SPI的核心类,每个SPI都会对应一个ExtensionLoader类实例,这个类的构造方法如下: private ExtensionLoader(Class&l ...

  6. 内核探测工具systemtap简介【转】

    转自:http://www.cnblogs.com/hazir/p/systemtap_introduction.html systemtap是内核开发者必须要掌握的一个工具,本文我将简单介绍一下此工 ...

  7. python异步编程模块asyncio学习(二)

    尽管asyncio应用通常作为单线程运行,不过仍被构建为并发应用.由于I/O以及其他外部事件的延迟和中断,每个协程或任务可能按一种不可预知的顺序执行.为了支持安全的并发执行,asyncio包含了thr ...

  8. python hmac解密

    import hmac def get_singa_true(timestamp): sha1 = hmac.new("d1b964811afb40118a12068ff74a12f4&qu ...

  9. JQuery 拾遗

    jquery基本上依赖百度,不熟悉的jquery操作记录于此: 1.判断元素的显示隐藏:$("#XXX").is(':visible'). 2. jquery取所有属性以什么开头 ...

  10. zxing二维码

    最近二维码用的很多,同时给了个zxing.dll和demo,用着还不错,就想着自己看看源码.于是搜索到一下资料: ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目标是能够对QR编 ...