开始,先放大招

一  最原始的写法

前戏之序列化

class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = models.AuthorDatail
fields = '__all__' class BookSerializer(serializers.ModelSerializer):
# 必须写一个内部类,名字叫Meta
class Meta:
model = models.Book fields = '__all__' class PublishSerializers(serializers.ModelSerializer):
class Meta:
model = models.Publish
fields = '__all__'

views

class PublishView(APIView):

    def get(self, request):
publish_list = Publish.objects.all()
bs = PublishSerializers(publish_list, many=True) return JsonResponse(bs.data,safe=False) def post(self, request):
# 添加一条数据
print(request.data) bs = PublishSerializers(data=request.data)
if bs.is_valid():
bs.save() # 生成记录
return JsonResponse(bs.data,safe=False)
else: return JsonResponse(bs.errors,safe=False) class PublishDetailView(APIView):
def get(self, request, pk):
publish_obj = Publish.objects.filter(pk=pk).first()
bs = PublishSerializers(publish_obj, many=False)
return JsonResponse(bs.data,safe=False) def put(self, request, pk):
publish_obj = Publish.objects.filter(pk=pk).first() bs = PublishSerializers(data=request.data, instance=publish_obj)
if bs.is_valid():
bs.save() # update
return JsonResponse(bs.data)
else:
return JsonResponse(bs.errors) def delete(self, request, pk):
Publish.objects.filter(pk=pk).delete() return JsonResponse("")

路由

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

二  小试牛刀

views

class List:
def list(self,request):
publish_list = Publish.objects.all()
bs = PublishSerializers(publish_list, many=True) return JsonResponse(bs.data,safe=False)
class Create:
def create(self,request):
bs = PublishSerializers(data=request.data)
if bs.is_valid():
bs.save()
return JsonResponse(bs.data,safe=False)
else:
return JsonResponse(bs.errors,safe=False) class PublishView(APIView,List,Create):
def get(self,request):
return self.list(request) def create(self,request):
return self.create(request)

url

同上

三  这次是初生牛犊之牛刀

views

class List:
def list(self,request):
querryset = self.querryset
bs = self.serializers(querryset,many=True)
return JsonResponse(bs.data, safe=False) class Create: def create(self,request):
print(request.data)
bs =self.serializers(data=request.data)
if bs.is_valid():
bs.save() # 生成记录
return JsonResponse(bs.data,safe=False)
else: return JsonResponse(bs.errors,safe=False) class PublishView(APIView,List,Create):
querryset = Publish.objects.all()
serializers = PublishSerializers
def get(self,request):
return self.list(request)
def post(self,request):
return self.create(request) class BookView(APIView,List,Create):
querryset = Book.objects.all()
serializers = BookSerializer
def get(self,request):
return self.list(request)
def post(self,request):
return self.create(request)

url

同上

四  牛刀

views


#drf提供的封装的类
from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, \
DestroyModelMixin
from rest_framework.generics import GenericAPIView class PublishView(GenericAPIView,ListModelMixin, CreateModelMixin):
queryset = Publish.objects.all()
serializer_class = PublishSerializers
def list(self,request):
return self.list(request)
def create(self,request):
return self.create(request) class AuthorDetail(GenericAPIView,ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin,DestroyModelMixin):
queryset = AuthorDatail.objects.all()
serializer_class = AuthorSerializer
def get(self,request,pk):
return self.retrieve(request,pk)
def post(self,request,pk):
return self.create(request,pk)
def put(self,request,pk):
return self.update(request,pk)
def delete(self,request,pk):
return self.delete(request,pk)

url

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

五  牛!牛!刀!

views

from rest_framework.generics import ListCreateAPIView, ListAPIView, RetrieveUpdateDestroyAPIView

class PublishView(ListCreateAPIView):
queryset = Publish.objects.all()
serializer_class = PublishSerializers class AuthorDetailView(RetrieveUpdateDestroyAPIView):
queryset = AuthorDatail.objects.all()
serializer_class = AuthorSerializer

url

同上

六  牛!牛!牛!刀

views

from rest_framework.viewsets import ModelViewSet

class PublishView(ModelViewSet):
queryset = Publish.objects.all()
serializer_class = PublishSerializers

url

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

七  究极版之牛都秃顶了

views

同上

url

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

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. docker动态添加磁盘

    docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter #!/bin/bash #This script is dynamic mount ...

  2. linux时间同步-NTP服务

    作者:曹世军链接:https://www.zhihu.com/question/30252609/answer/108840850来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  3. STL源代码剖析——STL算法stl_algo.h

    前言 在前面的博文中剖析了STL的数值算法.基本算法和set集合算法.本文剖析STL其它的算法,比如排序算法.合并算法.查找算法等等.在剖析的时候.会针对函数给出一些样例说明函数的使用.源代码出自SG ...

  4. How to add total page to Odoo Report(7.0 version)

    add this codes to your rml file: <drawRightString x="19.5cm" y="0.3cm">Pag ...

  5. Geek们为什么都用Linux?《完全使用Linux工作-王垠》读后记

    真正开始使用Linux是从2013年某月看到王垠写的一篇<完全用Linux工作>,当时属于无比崇拜王垠的阶段,虽然在那之前常年都在电脑上装着双系统(linux,win),但linux也只能 ...

  6. 基于quick-cocos2d-x的LuaSocket范例

    这是一个 luasocket 范例. 为了便于使用,我封装了 luasocket 到 cc.net.SocketTCP 类中.这个范例展示如何使用 cc.net.SocketTCP . 同时,在本范例 ...

  7. vim -- 查找和替换

    %s/foo/bar/g 在所有行中寻找‘foo’,并且用‘bar’替换 :s/foo/bar/g 在当前行寻找‘foo’,并且用‘foo’替换 :%s/foo/bar/gc 将每一个‘foo',并用 ...

  8. Java异常框架设计

    什么是异常? 异常(exception)应该是异常事件(exceptional event)的缩写.异常定义:异常是一个在程序执行期间发生的事件,它中断正在执行的程序的正常的指令流.当在一个方法中发生 ...

  9. Java反射机制的作用?

    Java反射机制的作用? 解答:Java反射机制的作用是: 1)在运行时判断任意一个对象所属的类. 2)在运行时构造任意一个类的对象. 3)在运行时判断任意一个类所具有的成员变量和方法. 4)在运行时 ...

  10. Mysql8.0.16 only_full_group_by

    [1]Mysql8.0.16 关于only_full_group_by问题 应公司业务的需求,安装了Mysql8.0.16版本,原来在Mysql5.6版本执行无恙的SQL语句: SELECT prod ...