知识预览

视图

使用混合(mixins)

上一节的视图部分:

 
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import *
from django.shortcuts import HttpResponse
from django.core import serializers from rest_framework import serializers class BookSerializers(serializers.ModelSerializer):
class Meta:
model=Book
fields="__all__"
#depth=1 class PublshSerializers(serializers.ModelSerializer): class Meta:
model=Publish
fields="__all__"
depth=1 class BookViewSet(APIView): def get(self,request,*args,**kwargs):
book_list=Book.objects.all()
bs=BookSerializers(book_list,many=True,context={'request': request})
return Response(bs.data) def post(self,request,*args,**kwargs):
print(request.data)
bs=BookSerializers(data=request.data,many=False)
if bs.is_valid():
print(bs.validated_data)
bs.save()
return Response(bs.data)
else:
return HttpResponse(bs.errors) class BookDetailViewSet(APIView): def get(self,request,pk):
book_obj=Book.objects.filter(pk=pk).first()
bs=BookSerializers(book_obj,context={'request': request})
return Response(bs.data) def put(self,request,pk):
book_obj=Book.objects.filter(pk=pk).first()
bs=BookSerializers(book_obj,data=request.data,context={'request': request})
if bs.is_valid():
bs.save()
return Response(bs.data)
else:
return HttpResponse(bs.errors) class PublishViewSet(APIView): def get(self,request,*args,**kwargs):
publish_list=Publish.objects.all()
bs=PublshSerializers(publish_list,many=True,context={'request': request})
return Response(bs.data) def post(self,request,*args,**kwargs): bs=PublshSerializers(data=request.data,many=False)
if bs.is_valid():
# print(bs.validated_data)
bs.save()
return Response(bs.data)
else:
return HttpResponse(bs.errors) class PublishDetailViewSet(APIView): def get(self,request,pk): publish_obj=Publish.objects.filter(pk=pk).first()
bs=PublshSerializers(publish_obj,context={'request': request})
return Response(bs.data) def put(self,request,pk):
publish_obj=Publish.objects.filter(pk=pk).first()
bs=PublshSerializers(publish_obj,data=request.data,context={'request': request})
if bs.is_valid():
bs.save()
return Response(bs.data)
else:
return HttpResponse(bs.errors)
 

通过使用mixin类编写视图:

 
from rest_framework import mixins
from rest_framework import generics class BookViewSet(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView): queryset = Book.objects.all()
serializer_class = BookSerializers def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs) class BookDetailViewSet(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializers 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)
 

使用通用的基于类的视图

通过使用mixin类,我们使用更少的代码重写了这些视图,但我们还可以再进一步。REST框架提供了一组已经混合好(mixed-in)的通用视图,我们可以使用它来简化我们的views.py模块。

 
from rest_framework import mixins
from rest_framework import generics class BookViewSet(generics.ListCreateAPIView): queryset = Book.objects.all()
serializer_class = BookSerializers class BookDetailViewSet(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializers class PublishViewSet(generics.ListCreateAPIView): queryset = Publish.objects.all()
serializer_class = PublshSerializers class PublishDetailViewSet(generics.RetrieveUpdateDestroyAPIView):
queryset = Publish.objects.all()
serializer_class = PublshSerializers
 

最新文章

  1. CRM 安全证书到期操作命令
  2. 【codeforces 148D】 Bag of mice
  3. Go项目的目录结构
  4. TCP/IP学习-链路层
  5. PHP数组操作汇总 php数组的使用技巧
  6. [chrome插件分享] gitlab-tree 更方便的浏览Gitlab上的代码
  7. 循环a数组(值代表b的下标)删除b数组中存在的记录,从后往前删
  8. Python基础:序列
  9. shell脚本批量ping测试IP是否通
  10. Solr 4.3.0 配置Data import handler时出错
  11. HDFS2.x之RPC流程分析
  12. 10.10 dos实验
  13. 如何通过Visual Studio发布Azure应用程序
  14. 中小型公司数据仓库搭建——以mysql为例
  15. [机器学习Lesson3] 梯度下降算法
  16. Android Studio3.x上使用Lombok
  17. matplotlia应用
  18. 下载m3u8视频
  19. react开发初始配置和一些问题
  20. Java集合框架——容器的快速报错机制 fail-fast 是什么?

热门文章

  1. JSP内置对象(一)
  2. 【Mac】快速复制文件路径
  3. Zabbix面试总结
  4. go 学习笔记之学习函数式编程前不要忘了函数基础
  5. FreeSql (十四)批量更新数据
  6. java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序
  7. Kubernetes v1.16 发布 | 云原生生态周报 Vol. 20
  8. 增删改查——DBUtils
  9. Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin
  10. 12 (OC)* AFNetworking