开始,先放大招

一  最原始的写法

前戏之序列化

  1. class AuthorSerializer(serializers.ModelSerializer):
  2. class Meta:
  3. model = models.AuthorDatail
  4. fields = '__all__'
  5.  
  6. class BookSerializer(serializers.ModelSerializer):
  7. # 必须写一个内部类,名字叫Meta
  8. class Meta:
  9. model = models.Book
  10.  
  11. fields = '__all__'
  12.  
  13. class PublishSerializers(serializers.ModelSerializer):
  14. class Meta:
  15. model = models.Publish
  16. fields = '__all__'

views

  1. class PublishView(APIView):
  2.  
  3. def get(self, request):
  4. publish_list = Publish.objects.all()
  5. bs = PublishSerializers(publish_list, many=True)
  6.  
  7. return JsonResponse(bs.data,safe=False)
  8.  
  9. def post(self, request):
  10. # 添加一条数据
  11. print(request.data)
  12.  
  13. bs = PublishSerializers(data=request.data)
  14. if bs.is_valid():
  15. bs.save() # 生成记录
  16. return JsonResponse(bs.data,safe=False)
  17. else:
  18.  
  19. return JsonResponse(bs.errors,safe=False)
  20.  
  21. class PublishDetailView(APIView):
  22. def get(self, request, pk):
  23. publish_obj = Publish.objects.filter(pk=pk).first()
  24. bs = PublishSerializers(publish_obj, many=False)
  25. return JsonResponse(bs.data,safe=False)
  26.  
  27. def put(self, request, pk):
  28. publish_obj = Publish.objects.filter(pk=pk).first()
  29.  
  30. bs = PublishSerializers(data=request.data, instance=publish_obj)
  31. if bs.is_valid():
  32. bs.save() # update
  33. return JsonResponse(bs.data)
  34. else:
  35. return JsonResponse(bs.errors)
  36.  
  37. def delete(self, request, pk):
  38. Publish.objects.filter(pk=pk).delete()
  39.  
  40. return JsonResponse("")

路由

  1. url(r'^publish/$', views.PublishView.as_view()),
  2. url(r'^publish/(?P<pk>\d+)', views.PublishDetailView.as_view()),

二  小试牛刀

views

  1. class List:
  2. def list(self,request):
  3. publish_list = Publish.objects.all()
  4. bs = PublishSerializers(publish_list, many=True)
  5.  
  6. return JsonResponse(bs.data,safe=False)
  7. class Create:
  8. def create(self,request):
  9. bs = PublishSerializers(data=request.data)
  10. if bs.is_valid():
  11. bs.save()
  12. return JsonResponse(bs.data,safe=False)
  13. else:
  14. return JsonResponse(bs.errors,safe=False)
  15.  
  16. class PublishView(APIView,List,Create):
  17. def get(self,request):
  18. return self.list(request)
  19.  
  20. def create(self,request):
  21. return self.create(request)

url

同上

三  这次是初生牛犊之牛刀

views

  1. class List:
  2. def list(self,request):
  3. querryset = self.querryset
  4. bs = self.serializers(querryset,many=True)
  5. return JsonResponse(bs.data, safe=False)
  6.  
  7. class Create:
  8.  
  9. def create(self,request):
  10. print(request.data)
  11. bs =self.serializers(data=request.data)
  12. if bs.is_valid():
  13. bs.save() # 生成记录
  14. return JsonResponse(bs.data,safe=False)
  15. else:
  16.  
  17. return JsonResponse(bs.errors,safe=False)
  18.  
  19. class PublishView(APIView,List,Create):
  20. querryset = Publish.objects.all()
  21. serializers = PublishSerializers
  22. def get(self,request):
  23. return self.list(request)
  24. def post(self,request):
  25. return self.create(request)
  26.  
  27. class BookView(APIView,List,Create):
  28. querryset = Book.objects.all()
  29. serializers = BookSerializer
  30. def get(self,request):
  31. return self.list(request)
  32. def post(self,request):
  33. return self.create(request)

url

同上

四  牛刀

views

  1.  
  1. #drf提供的封装的类
  1. from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, \
  2. DestroyModelMixin
  3. from rest_framework.generics import GenericAPIView
  4.  
  5. class PublishView(GenericAPIView,ListModelMixin, CreateModelMixin):
  6. queryset = Publish.objects.all()
  7. serializer_class = PublishSerializers
  8. def list(self,request):
  9. return self.list(request)
  10. def create(self,request):
  11. return self.create(request)
  12.  
  13. class AuthorDetail(GenericAPIView,ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin,DestroyModelMixin):
  14. queryset = AuthorDatail.objects.all()
  15. serializer_class = AuthorSerializer
  16. def get(self,request,pk):
  17. return self.retrieve(request,pk)
  18. def post(self,request,pk):
  19. return self.create(request,pk)
  20. def put(self,request,pk):
  21. return self.update(request,pk)
  22. def delete(self,request,pk):
  23. return self.delete(request,pk)

url

  1. url(r'^publish/', views.PublishView.as_view()),
  2. url(r'^publish/(?P<pk>\d+)', views.PublishView.as_view()),
  3.  
  4. url(r'^authorDetail/', views.AuthorDetailView.as_view()),
  5. url(r'^authorDetail/(?P<pk>\d+)',views.AuthorDetailView.as_view()),

五  牛!牛!刀!

views

  1. from rest_framework.generics import ListCreateAPIView, ListAPIView, RetrieveUpdateDestroyAPIView
  2.  
  3. class PublishView(ListCreateAPIView):
  4. queryset = Publish.objects.all()
  5. serializer_class = PublishSerializers
  6.  
  7. class AuthorDetailView(RetrieveUpdateDestroyAPIView):
  8. queryset = AuthorDatail.objects.all()
  9. serializer_class = AuthorSerializer

url

同上

六  牛!牛!牛!刀

views

  1. from rest_framework.viewsets import ModelViewSet
  2.  
  3. class PublishView(ModelViewSet):
  4. queryset = Publish.objects.all()
  5. serializer_class = PublishSerializers

url

  1. url(r'^publish/', views.PublishView.as_view({'get': 'list', 'post': 'create'})),
  2. url(r'^publish/(?P<pk>\d+)', views.PublishView.as_view({'get': 'retrieve', 'put': 'update','delete':'destroy'})),

七  究极版之牛都秃顶了

views

同上

url

  1. from django.conf.urls import url,include
  2. from django.contrib import admin
  3. from app01 import views
  4. from rest_framework import routers
  5. # 生成一个router对象
  6. router=routers.DefaultRouter()
  7. # 需要传两个参数,第一个参数就是匹配的路径,第二个参数,是视图类
  8. router.register('publish',views.PublishView)
  9. urlpatterns = [
  10. url('', include(router.urls)),
  11. ]

rest_framake之视图的更多相关文章

  1. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  2. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  3. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  4. ABP文档 - Mvc 视图

    文档目录 本节内容: 简介 AbpWebViewPage 基类 简介 ABP通过nuget包Abp.Web.Mvc集成到Mvc视图里,你可以像往常那样创建常规的视图. AbpWebViewPage 基 ...

  5. 探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  6. 探索ASP.NET MVC5系列之~~~3.视图篇(下)---包含常用表单和暴力解猜防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  7. SQL Server-聚焦在视图和UDF中使用SCHEMABINDING(二十六)

    前言 上一节我们讨论了视图中的一些限制以及建议等,这节我们讲讲关于在UDF和视图中使用SCHEMABINDING的问题,简短的内容,深入的理解,Always to review the basics. ...

  8. SQL Server-聚焦使用视图若干限制/建议、视图查询性能问题,你懵逼了?(二十五)

    前言 上一节我们简单讲述了表表达式的4种类型,这一系列我们来讲讲使用视图的限制,简短的内容,深入的理解,Always to review the basics. 避免在视图中使用ORDER BY 上一 ...

  9. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

随机推荐

  1. (4)Smali系列学习之Smali语法详解内部类

    在这一节,我们来介绍一下内部类.对于Java文件中的每一个内部类,都会产生一个单独的smali文件,比如ActivityThread$1.smali.这些文件的命名规范是如果是匿名内部类,则命名规则是 ...

  2. JackJson的一些方法

    package cn.edu.hbcf.common.jackjson; import java.io.IOException; import java.text.SimpleDateFormat; ...

  3. 最短路中部分点仅仅能从中随意选取K个问题

    题意:给N个点,还有另外m个点(当中仅仅能选K个).求最短路. 思路:在SPFA的基础上,用一个数组来统计,在某点入队时(要拓展其它点了),若该点是m个点中的,则count[i]=原来的+1:若不是. ...

  4. 控件禁用与启easyui用

    1.validatebox可以用的用法:前两种适用于单个的validatebox;第三种应用于整个form里面的输入框; <1>.$("#id").attr(" ...

  5. PAT006 Tree Traversals Again

    题目: An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For exa ...

  6. 05 Java图形化界面设计——布局管理器之GridLayout(网格布局)

    网格布局特点: l  使容器中的各组件呈M行×N列的网格状分布. l  网格每列宽度相同,等于容器的宽度除以网格的列数. l  网格每行高度相同,等于容器的高度除以网格的行数. l  各组件的排列方式 ...

  7. 《转》openstack中删除虚拟主机,状态一直deleting

    一.我重新启动了该机器.之后想删除没有创建成功的虚拟机(没有打开cpu的vt).结果发现状态一直为deleting状态.在这个状态下创建虚拟机也失败. 二.分析:在/var/log/nova/nova ...

  8. asp.net发送邮件带格式(本demo发送验证码)

    public ActionResult Mail(string email, string userName) { try { MailSender mail = new MailSender(); ...

  9. Linux初学者学习资料

    鸟哥的Linux私房菜 http://vbird.dic.ksu.edu.tw/linux_basic/linux_basic.php

  10. js压缩 uglify(2)

    一.故事总有其背景 年末将至,很多闲适的时间,于是刷刷微博,接触各种纷杂的信息——美其名曰“学习”.运气不错,遇到了一个新名词,uglifyjs. 据说是用来压缩JS文件的,据说还能优化JS,据说是基 ...