DRF (Django REST framework) 中的视图类
视图说明
1. 两个基类
1)APIView
rest_framework.views.APIView
APIView是REST framework提供的所有视图的基类,继承自Django的View父类。
APIView与View的不同之处在于:
- 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象;
- 视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;
- 任何APIException异常都会被捕获到,并且处理成合适的响应信息;
- 在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
支持定义的属性:
- authentication_classes 列表或元祖,身份认证类
- permissoin_classes 列表或元祖,权限检查类
- throttle_classes 列表或元祖,流量控制类
在APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法。
举例:
from rest_framework.views import APIView
from rest_framework.response import Response # url(r'^books/$', views.BookListView.as_view()),
class BookListView(APIView):
def get(self, request):
books = BookInfo.objects.all()
serializer = BookInfoSerializer(books, many=True)
return Response(serializer.data)
2)GenericAPIView
rest_framework.generics.GenericAPIView
继承自APIVIew,增加了对于列表视图和详情视图可能用到的通用支持方法。主要增加了操作序列化器和数据库查询的方法,作用是为下面Mixin扩展类的执行提供方法支持。通常使用时,可搭配一个或多个Mixin扩展类。
支持定义的属性:
- 列表视图与详情视图通用:
- queryset 列表视图的查询集
- serializer_class 视图使用的序列化器
 
- 列表视图使用:
- pagination_class 分页控制类
- filter_backends 过滤控制后端
 
- 详情页视图使用:
- lookup_field 查询单一数据库对象时使用的条件字段,默认为'pk'
- lookup_url_kwarg 查询单一数据时URL中的参数关键字名称,默认与look_field相同
 
- lookup_field 查询单一数据库对象时使用的条件字段,默认为'
提供的方法:
- 列表视图与详情视图通用: - get_queryset(self) - 返回视图使用的查询集,是列表视图与详情视图获取数据的基础,默认返回 - queryset属性,可以重写,例如:- def get_queryset(self): 
 user = self.request.user
 return user.accounts.all()
- get_serializer_class(self) - 返回序列化器类,默认返回 - serializer_class,可以重写,例如:- def get_serializer_class(self): 
 if self.request.user.is_staff:
 return FullAccountSerializer
 return BasicAccountSerializer
- get_serializer(self, args, *kwargs)- 返回序列化器对象,被其他视图或扩展类使用,如果我们在视图中想要获取序列化器对象,可以直接调用此方法。 - 注意,在提供序列化器对象的时候,REST framework会向对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用。 
 
- 详情视图使用:
- get_object(self) 返回详情视图所需的模型类数据对象,默认使用 - lookup_field参数来过滤queryset。 在试图中可以调用该方法获取详情信息的模型类对象。- 若详情访问的模型类对象不存在,会返回404。 - 该方法会默认使用APIView提供的check_object_permissions方法检查当前对象是否有权限被访问。 
 
举例:
# url(r'^books/(?P<pk>\d+)/$', views.BookDetailView.as_view()),
class BookDetailView(GenericAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer def get(self, request, pk):
book = self.get_object()
serializer = self.get_serializer(book)
return Response(serializer.data)
DRF (Django REST framework) 中的视图类的更多相关文章
- DRF (Django REST framework) 中的视图扩展类
		2. 五个扩展类 1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法 ... 
- Django REST framework 中的视图
		1.Request REST framework传入视图的request对象不再是Django默认的Httprequest对象,而是DRF提供的扩展类的Request类的对象 常用属性 request ... 
- DRF (Django REST framework) 中的Request 与 Response
		DRF中的Request 与 Response 1. Request - REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST f ... 
- DRF (Django REST framework) 中的路由Routers
		路由Routers 注意是:对于视图集ViewSet!!!我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST frame ... 
- Django REST framework基础:视图和路由
		DRF中的Request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 比如,区别于Dj ... 
- DRF Django REST framework   APIView(一)
		什么是REST? REST是一个标准,一种规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用. 使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减 ... 
- Django REST framework 中文文档
		Django REST framework介绍 现在前后端分离的架构设计越来越流行,业界甚至出现了API优先的趋势. 显然API开发已经成为后端程序员的必备技能了,那作为Python程序员特别是把Dj ... 
- 轻轻松松学会 DRF Django REST framework
		据我了解,目前的IT行业的大部分后端开发,都是需要进行前后端分离的,而前后端分类必不可少的是rest 规范,以下是django rest framework的学习路径: DRF Django REST ... 
- 在 .NET Framework 中使用 StringBuilder 类
		在 .NET Framework 中使用 StringBuilder 类 String 对象是不可变的.每次使用 System.String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就 ... 
随机推荐
- 20131207-ADO.NET-第十六天
			[1]快捷键 工具箱:ctrl+w+x 首字母定位控件范围 属性:F4 或ctrl+w+p Tab跳转 ,home 与end也有效 [2]连接字符串 string str = "Data S ... 
- [记录]FIO测试磁盘iops性能
			FIO测试磁盘iops性能 1.SATA和SAS盘原生IOPS如下: 2.RAID磁盘阵列对应的写惩罚级别: 3.计算功能性IOPS公式如下: 功能性 IOPS=(((总原生 IOPS×写 %))/( ... 
- http://www.jianshu.com/p/2dd54ec0bb43 程序员纪录片
			http://www.jianshu.com/p/2dd54ec0bb43 程序员纪录片 
- 简介SoftICE是Compuware NuMega公司1的产品,是目前公认最好的系统级调试工具
			简介SoftICE是Compuware NuMega公司1的产品,是目前公认最好的系统级调试工具 
- [AOP拦截 ]SpringBoot+Quartz Aop拦截Job类中的方法
			 最近在工作使用boot+quartz整合,开发定时调度平台,遇到需要对Quartz的Job进行异常后将异常记录到日志表的操作,第一反应就想到了使用Spring的AOP,利用AfterThrowin ... 
- codemirror使用
			JS使用 使用bower下载 bower i codemirror 引入样式文件 <link rel="stylesheet" type="text/css&quo ... 
- linux初学者-虚拟机联网篇
			linux初学者-虚拟机联网篇 在虚拟机的使用过程中,本机可以连接WIFI直接上网,但是有时候需要用到虚拟机的联网,那么在本机联网的情况下,虚拟机怎么联网呢?接下来将介绍如何在本机已经连接到WIFI的 ... 
- java练习---6
			//程序员:罗元昊 2017.9.24 import java.util.Scanner; public class L { public static void main(String[] args ... 
- CentOS7源码安装Nginx
			系统平台:腾讯云服务器 CentOS 7.3 64位 一.安装编译工具及库文件 [root@VM_0_5_centos ~]# yum install -y make zlib zlib-devel ... 
- Gordon家族(一)
			引子 Go语言的吉祥物是一只囊地鼠(gopher),由插画师Renee French设计,名叫Gordon,长得这个样子: 在Go官网上(https://golang.google.cn/)的Gord ... 
