day100

上节回顾

1 APIView流程

2 序列化组件(restframework)

    1 #  自定义序列化组件
class BookSerializers(serializers.Serializer):
title=serializers.CharField()
price=serializers.CharField()
publishDate=serializers.DateField() # 针对一对多
publish=serializers.CharField(source="publish.name")
publish_email=serializers.CharField(source="publish.email")
# 针对多对多
authors=serializers.SerializerMethodField()
def get_authors(self,obj):
data=[]
for i in obj.authors.all():
temp=[]
temp.append(i.pk)
temp.append(i.name)
data.append(temp)
return data
# ModelSerializer序列化组件
class BookSerializers(serializers.ModelSerializer):
class Meta:
model=Book
fields="__all__" publish = serializers.CharField(source="publish.name")
authors=serializers.SerializerMethodField()
def get_authors(self,obj):
data=[]
for i in obj.authors.all():
temp=[]
temp.append(i.pk)
temp.append(i.name)
data.append(temp)
return data 2 5个接口 "books" GET:获取所有数据
POST:添加一条数据 "book/1" GET:获取单条数据
DELETE:删除一条数据
PUT/PATCH:更新一条数据 3
(1) 功能之序列化:
book_list = Book.objects.all()
ps = BookSerializers(book_list, many=True)
ps.data book_obj=Book.objects.filter(pk=pk).first()
bs=BookSerializers(book_obj,many=False) (2) 校验字段与操作记录(ModelSerializer拥有)
# 添加数据
bs=BookSerializers(data=request.data)
if bs.is_valid(): #校验字段接口
bs.save() # 生成记录接口
return Response(bs.data) # 序列化接口 # 更新数据
bs=BookSerializers(data=request.data,instance=book_obj)
if bs.is_valid(): #校验字段接口
bs.save() #更新记录接口
return Response(bs.data) # 序列化接口 3 视图 (1) class AuthorView(APIView):
def get():
pass
def post():
pass class AuthorDetailView(APIView):
def get():
pass
def delete():
pass
def put():
pass (2) class AuthorView(CreateModelMixin,ListModelMixin,generics.GenericAPIView,): queryset=Author.objects.all
serializer_class=AuthorSerializers def get(self,request):
return self.list(request)
def post(self,request): return self.create(request) class AuthorDetailView(DestroyModelMixin,UpdateModelMixin,RetrieveModelMixin,generics.GenericAPIView,):
queryset = Author.objects.all
serializer_class = AuthorSerializers 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)
(3) class AuthorView(generics.ListCreateAPIView): queryset=Author.objects.all
serializer_class=AuthorSerializers class AuthorDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Author.objects.all
serializer_class = AuthorSerializers (4) class AuthorModelView(ModelViewSet): queryset=Author.objects.all()
serializer_class=AuthorSerializers ViewSetMixIn     第4种的url要传参数,注意 如:       url(r'^publishs/$',views.PublishView.as_view({"get":"list","post":"create"})),
  
url(r'^publishs/(?P<pk>\d+)/$',views.PublishView.as_view({"put":"update","get":"retrieve","delete":"destroy"}))

4 解析器
class APIView:
parser_classes = api_settings.DEFAULT_PARSER_CLASSES

restframework CBV试图的4种方式的更多相关文章

  1. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  2. Android数据存储五种方式总结

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据     2 文件存储数据       3 SQLite数据库存储数据 4 使用Cont ...

  3. js关闭当前页面(窗口)的几种方式总结(转)

    js关闭当前页面(窗口)的几种方式总结     1. 不带任何提示关闭窗口的js代码 代码如下 <a href="javascript:window.opener=null;windo ...

  4. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  5. UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式

    一.对UITabBar背景和icon图标的一些设置 (1)因为直接给UITabBar设置的背景颜色显示的不纯,半透明的感觉,所以,有时候我们可以直接利用纯色的图片作为背景达到想要的效果: (2)给ic ...

  6. 【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式

    一.对UITabBar背景和icon图标的一些设置 (1)由于直接给UITabBar设置的背景颜色显示的不纯.半透明的感觉,所以,有时候我们能够直接利用纯色的图片作为背景达到想要的效果. (2)给ic ...

  7. 创建控制器的3种方式、深入了解view的创建和加载顺序

    转载自:http://blog.csdn.net/weisubao/article/details/41012243 (1)创建控制器的3种方式 - (BOOL)application:(UIAppl ...

  8. Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

    转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...

  9. 讨论HTTP POST 提交数据的几种方式

    转自:http://www.cnblogs.com/softidea/p/5745369.html HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PU ...

随机推荐

  1. XMPP协议相关基础概念(Strophe学习笔记)

    相关资料: XMPP官网http://xmpp.org/xmpp-software/libraries/ nginx的转发配置http://mineral.iteye.com/blog/448260 ...

  2. 第一天:tomcat相关知识和浏览器的访问机制

    1.tomcat的目录结构 1)bin目录:启动和关闭tomcat以及其他的脚本命令  2)conf目录:存放各种配置文件 a.server.xml配置文件的配置: *<host/>标签: ...

  3. 第5章 使用MUI与H5+构建移动端app

    H5+是JS封装的工具集合,通过H5+我们就可以使用JS的方式去调用到我们手机端上的一些原生的组件. http://dev.dcloud.net.cn/mui/ http://dev.dcloud.n ...

  4. 04 UUID

    1 什么是UUID UUID 的目的是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定. 2 应用场景 MySQL数据库不能想oracle数据库那样创建序列,就 ...

  5. input框去只读

    设置为只读 $('input[name=video_link]').attr("readonly","readonly"); 去只读 $("#vide ...

  6. 按位操作符(Bitwise operators)

    按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...

  7. wifi下远程连接Android设备方法

    问题描述: android开发真机调试过程中,我们总是会重复卸载.安装这两个过程进行调试,通常都是用数据线连接电脑,能否摆脱数据线呢? 无线调试: 前提条件,电脑和手机必须处于同一局域网. 1.手机通 ...

  8. sql去掉换行符

    select replace(replace(ServiceCall,CHAR(13),''),CHAR(10),'') from outbound_complaint  where  bz1='朱成 ...

  9. android报错:org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject

    今天在写一个webservice时一直报错,报Caused by: java.lang.ClassCastException: org.ksoap2.SoapFault cannot be cast ...

  10. C#找到目录和其子目录的某个文件

    string url = ""; string[] urls = Directory.GetFiles(目录, 文件名, SearchOption.AllDirectories); ...