Django:RestFramework之-------视图
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之-------视图的更多相关文章
- Django RestFramework(DRF)类视图
基础视图 1.基础函数视图(@api_view) DRF提供了一种函数基础视图来装饰Django的普通视图,我们可以使用request来接受请求和response响应.一个小例子: from rest ...
- django restframework
一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...
- django restframework 快速入门
django restframework 快速入门 基本流程 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显示 ...
- Django Restframework 实践(一)
具备以下知识: django http://www.cnblogs.com/menkeyi/p/5882464.html http://www.cnblogs.com/menkeyi/p/588245 ...
- django: rest-framework的 分页和过滤
django: rest-framework的 分页和过滤 2018年06月28日 10:09:01 weixin_42359464 阅读数:136 标签: flaskrestframeworkdja ...
- Django:RestFramework之-------认证
3 restframework-认证 3.1APIView 认证: 认证是否已经登陆,如果已经登陆返回元组,如果没有登陆报错 源码流程: 执行dispatch方法: def dispatch(self ...
- Django RestFramework (DRF)
准备: 下载 pip install djangorestframework 一 APIView源码解析 1 预备知识 CBV(class based view)FBV(function based ...
- 测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架
一.思考❓❔ 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Dj ...
- django restframework serializer 增加自定义字段
在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...
随机推荐
- NGUI里的sprite和label有白色的边框
问题描述:NGUI里的sprite和label有白色的边框,而原图一切正常 如图: 解决方案: 给Sprite 边缘左右更增加1,这样拉伸的时候就忽略了左右1的位置,图片就不会显示白色边框了
- Android: Error inflating class android.support.v4.view.ViewPager 问题的解决方法
ViewPager是个很好很强大的控件,很多应用用它来实现很酷的效果,但是很多情况下在运行时会遇到Error inflating class android.support.v4.view.ViewP ...
- Java的修饰、继承、接口、抽象类
1.private 修饰属性或者方法,只能在本类中被访问,定义后需要加get()set()方法,这样提高数据的安全性 私有属性虽然不能直接访问,但是其对象 或者 子类对象可以通过公有方法进行设值和获 ...
- VS 编译总是出现错误: "LC.EXE 已退出,代码为-1"
最近在开发CS的一个项目时,编译总是出现错误: "LC.EXE 已退出,代码为-1" 解决方法一:用记事本打开*.licx,里面写的全是第三方插件的指定DLL,删除错误信息,保存, ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,升级流程源码详细说明
前言 1.BootLoader程序,升级简要流程图 2.其实主要的就是把程序文件写入环形队列,然后环形队列取出来数据写入Flash 3.用户程序,简要流程图 下面的读一下,有个印象就可以: 说白了就是 ...
- PATB1048数字加密
关于代码都是可以在PAT上跑通的 自己是在VS2017上写的,所以会有语句system("pause");,表示暂定方便查看结果. *在一个是VS2017中使用scanf会报错,所 ...
- UDF——文件编码造成UDF编译失败
有时候我们觉得我们的代码写得很正确的,但是在Fluent当中编译的时候一直编译不通过,提示我们错误,我们根据Fluent当中的错误提示去找到源代码中对应的行,却发现没有错误提示当中的问题,出现这个问题 ...
- Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
本文非常详尽地介绍了Java中的三个集合类 ArrayList,Vector与Stack <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整 ...
- Java判断文件类型
通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等. 2. 通过读取文件,获取文件的Content-type来 ...
- Markdown 编辑器指南
一直觉得博客园默认的编辑器不好用,后来了解了Markdown,并且博客园也支持Markdown标记,所以写篇博客总结下. 一.认识 Markdown Markdown 是一种用来写作的轻量级「标记语言 ...