10.视图

  • GenericAPIView封装一些方法,将这些方法返回值放在类变量位置上.

1.GenericAPIView视图示例:不怎么用

from api.utils.serializers.pager import PagerSerialiser
from rest_framework.generics import GenericAPIView class VView(GenericAPIView):
#获取模型类
queryset = models.Role.objects.all()
#序列化器
serializer_class = PagerSerialiser
#分页设置
pagination_class = PageNumberPagination
def get(self,request,*args,**kwargs):
roles = self.get_queryset()#获得数据
#分页获取
pager_roles = self.paginate_queryset(roles)
#序列化
ser = self.get_serializer(instance=pager_roles,many=True)
return Response(ser.data)

2.GenericViewSet视图类

  • 实现自定义路由执行函数
#urls.py
#get方法过来执行VView get请求执行list方法. post请求执行tijiao
url(r'^(?P<version>[v1|v2]+)/vview/$', views.VView.as_view({"get":"list","post":"tijiao"}),),
#视图函数:
from rest_framework.viewsets import GenericViewSet
class VView(GenericViewSet):
#获取模型类
queryset = models.Role.objects.all()
#序列化器
serializer_class = PagerSerialiser
#分页设置
pagination_class = PageNumberPagination
def list(self,request,*args,**kwargs):
roles = self.get_queryset()#获得数据
#分页获取
pager_roles = self.paginate_queryset(roles)
#序列化
ser = self.get_serializer(instance=pager_roles,many=True)
return Response(ser.data)
def tijiao(self,request,*args,**kwargs):pass

3.ListModelMixin 封装get请求

4.CreateModelMixin 自带post请求

#urls.py
url(r'^(?P<version>[v1|v2]+)/vview/$', views.VView.as_view({"get":"list","post":"create"}),),
#GenericViewSet自定义request.methods处理方法,在url上设置
#视图函数:
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin,CreateModelMixin
class VView(ListModelMixin,CreateModelMixin,GenericViewSet):
#获取模型类
queryset = models.Role.objects.all()
#序列化器
serializer_class = PagerSerialiser
#分页设置
pagination_class = PageNumberPagination

5.ModelViewSet

  • 让你的代码变得简单舒服
  • ModelViewSet继承了前面所有类的功能
#urls.py
#设置{"get":"list"} 内置封装好了方法返回所有数据
url(r'^(?P<version>[v1|v2]+)/vview/$', views.VView.as_view({"get":"list"}),),
url(r'^(?P<version>[v1|v2]+)/vview/(?P<pk>\d+)/$', views.VView.as_view(
{"get":"retrieve","delete":"destroy","put":"update","patch":"partial_update"}),
),
"""
"get":"retrieve" 获取单个数据 访问URL:http://127.0.0.1:8000/api/v1/vview/2/
"delete":"destroy" 删除单个数据
"put":"update" 更新一条数据
"patch":"partial_update" 修改一条数据
""" from rest_framework.viewsets import ModelViewSet
class VView(ModelViewSet):
#获取模型类
queryset = models.Role.objects.all()
#序列化器
serializer_class = PagerSerialiser
#分页设置
pagination_class = PageNumberPagination
  • 显示效果

6.总结

1.基本增删改查用ModelViewSet
2.只有增删 CreateModelMixin,DestroyModelMixin,GenericViewSet
3.复杂增删改查,可以使用GenericViewSet 或 APIView
  • 知识拓展

    GenericViewSet.get_object  只有调用get_object
    check_object_permissions 用于判断你这个用户对这个对象是否有调用权限. has_object_permission 才会生效此方法

Django:RestFramework之-------视图的更多相关文章

  1. Django RestFramework(DRF)类视图

    基础视图 1.基础函数视图(@api_view) DRF提供了一种函数基础视图来装饰Django的普通视图,我们可以使用request来接受请求和response响应.一个小例子: from rest ...

  2. django restframework

    一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...

  3. django restframework 快速入门

    django restframework 快速入门 基本流程 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显示 ...

  4. Django Restframework 实践(一)

    具备以下知识: django http://www.cnblogs.com/menkeyi/p/5882464.html http://www.cnblogs.com/menkeyi/p/588245 ...

  5. django: rest-framework的 分页和过滤

    django: rest-framework的 分页和过滤 2018年06月28日 10:09:01 weixin_42359464 阅读数:136 标签: flaskrestframeworkdja ...

  6. Django:RestFramework之-------认证

    3 restframework-认证 3.1APIView 认证: 认证是否已经登陆,如果已经登陆返回元组,如果没有登陆报错 源码流程: 执行dispatch方法: def dispatch(self ...

  7. Django RestFramework (DRF)

    准备: 下载 pip install djangorestframework 一 APIView源码解析 1 预备知识 CBV(class based view)FBV(function based ...

  8. 测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架

    一.思考❓❔ 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Dj ...

  9. django restframework serializer 增加自定义字段

    在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...

随机推荐

  1. NGUI里的sprite和label有白色的边框

    问题描述:NGUI里的sprite和label有白色的边框,而原图一切正常 如图: 解决方案: 给Sprite 边缘左右更增加1,这样拉伸的时候就忽略了左右1的位置,图片就不会显示白色边框了

  2. Android: Error inflating class android.support.v4.view.ViewPager 问题的解决方法

    ViewPager是个很好很强大的控件,很多应用用它来实现很酷的效果,但是很多情况下在运行时会遇到Error inflating class android.support.v4.view.ViewP ...

  3. Java的修饰、继承、接口、抽象类

     1.private 修饰属性或者方法,只能在本类中被访问,定义后需要加get()set()方法,这样提高数据的安全性 私有属性虽然不能直接访问,但是其对象 或者 子类对象可以通过公有方法进行设值和获 ...

  4. VS 编译总是出现错误: "LC.EXE 已退出,代码为-1"

    最近在开发CS的一个项目时,编译总是出现错误: "LC.EXE 已退出,代码为-1" 解决方法一:用记事本打开*.licx,里面写的全是第三方插件的指定DLL,删除错误信息,保存, ...

  5. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,升级流程源码详细说明

    前言 1.BootLoader程序,升级简要流程图 2.其实主要的就是把程序文件写入环形队列,然后环形队列取出来数据写入Flash 3.用户程序,简要流程图 下面的读一下,有个印象就可以: 说白了就是 ...

  6. PATB1048数字加密

    关于代码都是可以在PAT上跑通的 自己是在VS2017上写的,所以会有语句system("pause");,表示暂定方便查看结果. *在一个是VS2017中使用scanf会报错,所 ...

  7. UDF——文件编码造成UDF编译失败

    有时候我们觉得我们的代码写得很正确的,但是在Fluent当中编译的时候一直编译不通过,提示我们错误,我们根据Fluent当中的错误提示去找到源代码中对应的行,却发现没有错误提示当中的问题,出现这个问题 ...

  8. Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理

    本文非常详尽地介绍了Java中的三个集合类 ArrayList,Vector与Stack <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整 ...

  9. Java判断文件类型

    通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等. 2. 通过读取文件,获取文件的Content-type来 ...

  10. Markdown 编辑器指南

    一直觉得博客园默认的编辑器不好用,后来了解了Markdown,并且博客园也支持Markdown标记,所以写篇博客总结下. 一.认识 Markdown Markdown 是一种用来写作的轻量级「标记语言 ...