我们之前写的  get  post  请求 要写很多 我们现在可以使用rest——framework给我们封装好的类

GenericAPIView

给我们提供了自动匹配验证的信息内部封装

from rest_framework.generics import GenericAPIView

提供了两个固定字段:

    queryset  获取的是你的所有的表的对象

  serializer_class 是让你的信息自动匹配

    queryset = models.Comment.objects.all()

    serializer_class = first_serializers.Commentserializer

我们以前使用get或者post需要自己定义逻辑 进行匹配 很麻烦 现在提供了 精简的类帮我们进行匹配校验

get请求:ListModelMixin  查看你的所有的信息

导入:

from rest_framework.mixins import  ListModelMixin,CreateModelMixin

我们继承这个类 然后再调用这个类的self.list(request,*args,**kwargs)   就完成了get的流程

class CommentView(GenericAPIView,ListModelMixin,CreateModelMixin):
'''
GenericAPIView 提供了queryset 和serializer_class 进行序列化并且校验 '''
queryset = models.Comment.objects.all()
serializer_class = first_serializers.Commentserializer
def get(self,request,*args,**kwargs):
return self.list(request,*args,**kwargs)

post请求:CreateModelMixin  创建信息

继承这个类 然后调用这个类的  self.create(request,*args,**kwargs) 就完成了post的请求并且创建了信息

class CommentView(GenericAPIView,ListModelMixin,CreateModelMixin):
'''
GenericAPIView 提供了queryset 和serializer_class 进行序列化并且校验 '''
queryset = models.Comment.objects.all()
serializer_class = first_serializers.Commentserializer
def get(self,request,*args,**kwargs):
return self.list(request,*args,**kwargs)
def post(self,request,*args,**kwargs):
print('要添加评论了')
return self.create(request,*args,**kwargs)

详细显示 指定的显示哪一个内容   RetrieveModelMixin

导入:

from rest_framework.mixins import RetrieveModelMixin

这个是你要指定你查看的信息的id查看的是详细的信息

这个是使用

return self.retrieve(request,pk)

来把你指定的信息返回

class Comment_DetailView(GenericAPIView,RetrieveModelMixin):
queryset = models.Comment.objects.all()
serializer_class = first_serializers.Commentserializer
def get(self,request,pk):
return self.retrieve(request,pk)

delete :删除信息  DestroyModelMixin

这个指定删除哪一项:

最后调用

self.destroy(request, pk)

并且我们可以调用其中的方法来告诉我们删除成功了:

#     def delete(self, request, pk):
# return self.destroy(request, pk)
#
# def perform_destroy(self, instance): #调用这个方法返回给我们删除额信息
# print("你要删除了...")
# instance.delete()
class Comment_DetailView(GenericAPIView,RetrieveModelMixin,DestroyModelMixin):
queryset = models.Comment.objects.all()
serializer_class = first_serializers.Commentserializer
def get(self,request,pk): #查看信息 return self.retrieve(request,pk) def delete(self, request, pk): # 删除信息return self.destroy(request, pk)

put  :修改信息  UpdateModelMixin

调用了

self.update(request, pk)

所有的数据发送额必须是json格式  (建议使用Postman)

多个封装:RetrieveUpdateDestroyAPIView

其中封装了校验模块    GenericAPIView      修改模块: UpdateModelMixin    删除模块: DestroyModelMixin    详细查看模块:RetrieveModelMixin

from rest_framework.generics import GenericAPIView, RetrieveUpdateDestroyAPIView, ListCreateAPIView
# class CommentDetailView(RetrieveUpdateDestroyAPIView):
# queryset = models.Comment.objects.all()
# serializer_class = app01_serializers.CommentSerializer

然后直接使用就可以了

ListCreateAPIView  :封装了查看   ListModelMixin   和post的 CreateModelMixin

# class CommentView(ListCreateAPIView):
# queryset = models.Comment.objects.all()
# serializer_class = app01_serializers.CommentSerializer
#

最终我们回想这么麻烦会不会有一个可以把所有的都给继承下来的呢:

最终大BOSS

所有的都可以使用:   ModelViewSet

from rest_framework.viewsets import ModelViewSet
直接这样使用就可以用post或者get所有的使用了
class CommentViewSet(ModelViewSet):
queryset = models.Comment.objects.all()
serializer_class = app01_serializers.CommentSerializer

这个我们就要想想 你的get和post put的请求不一样有的需要pk有的不需要 这个时候就要有一个同意的url了防止你设置过多的url

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'comment', views.CommentViewSet) #这个就是设置你的输入并且查找的视图
urlpatterns += router.urls

REST framework 视图层的更多相关文章

  1. web框架开发-Django视图层

    视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...

  2. django 实战篇之视图层

    视图层(views.py) django必会三板斧 HttpResponse >>> 返回字符串 render >>> 支持模板语法,渲染页面,并返回给前端 red ...

  3. Django视图层

    本文目录 1 视图函数 2 HttpRequest对象 3 HttpResponse对象 4 JsonResponse 5 CBV和FBV 6 简单文件上传 回到目录 1 视图函数 一个视图函数,简称 ...

  4. $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

    1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,  1 用pychanrm创建--->files-->newproject--->选择虚拟环境  2 setting ...

  5. springboot整合视图层之jsp

    在springboot中不推荐视图层使用jsp展示,但是人们以前已经习惯使用jsp,所以对jsp也有支持,但是是解耦性的.也就是说并没有像其他组件一样直接集成到启动器中,所以像jsp引擎之类的需要额外 ...

  6. 小程序学习笔记三:页面文件详解之视图层WXML、WXS、WXSS文件

      视图层:Pages主要有 wxml页面文件和模板文件.wxs脚本文件.wxss样式文件:component是抽取出来的业务单元,同样拥有wxml页面文件和模板文件.wxs脚本文件.wxss样式文件 ...

  7. DjangoMTV模型之视图层views及模板层template

    Django视图层中views的内容 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容(render),也可以是一个重定向( ...

  8. python 全栈开发,Day69(Django的视图层,Django的模板层)

    昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...

  9. ORM之视图层

    1.request对象 前台POST传来的数据,包装到POST字典中request.POST 前台浏览器窗口携带的数据,包装到GET字典中request.GET 前台请求的方式,request.met ...

随机推荐

  1. 关于EJB,为什么用EJB?为什么不用EJB?

    http://blog.csdn.net/linxi1209163com/article/details/51029890 一:什么是EJB 官方说法,就是企业级是基于语言的服务器框架技术,通过我们可 ...

  2. Aviator 表达式求值引擎开源框架

    简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...

  3. Vue双向绑定的关键:Object.defineProperty()

    这个方法了不起啊.vue.js和avalon.js 都是通过它实现双向绑定的.而且Object.observe也被草案发起人撤回了.所以defineProperty更有必要了解一下了. 先上几行代码看 ...

  4. src或者href值为base64编码代码

    大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64, iVBORw0KGgoAAAANSUhEUgnZVJlYWR5c ...

  5. vs2013 update 2 cordova(phonegap) 环境

    1.win8.1(需激活) 2.vs2013 update 2 http://www.microsoft.com/zh-cn/download/details.aspx?id=42665  安装说明里 ...

  6. SQL查询出某字段不等于某值的行(其中有为NULL的字段)

    表1如下:TBD1100   TBD1101   TBD1102------------------------------------------  1001            水果       ...

  7. 【转载&&干货】Noip应试技巧

    NOIP应试技巧 如何看待别人的经验? 我想大家都有台上的学长滔滔不绝,但是自己在台下漠不关心,或是老师考试前的叮嘱说完一会儿功夫就忘记了的经历吧.所以,有可能我接下来的所说的话,一到考场上就全部忘记 ...

  8. 福州大学oj 1752 A^B mod C ===>数论的基本功。位运用。五星*****

    Problem 1752 A^B mod C Accept: 579    Submit: 2598Time Limit: 1000 mSec    Memory Limit : 32768 KB P ...

  9. markdown 语法备忘

    markdwon语法, 增加以下CSS代码,可以对markdwon语法产生的文件进行分页操作. <div style="page-break-after:always;"&g ...

  10. git之回退

    1:本地已commit,未push到远程仓库          1)git log: 查看commit日志,获取commit的id 2)  git reset  --hard  commit_id: ...