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.userreturn user.accounts.all()
get_serializer_class(self)
返回序列化器类,默认返回
serializer_class
,可以重写,例如:def get_serializer_class(self):if self.request.user.is_staff:return FullAccountSerializerreturn 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 = BookInfoSerializerdef get(self, request, pk):book = self.get_object()serializer = self.get_serializer(book)return Response(serializer.data)
转载于:https://www.cnblogs.com/Paul-watermelon/p/10614405.html
DRF (Django REST framework) 中的视图类相关推荐
- 【接口文档】Django restful framework中自动生成API文档
Django restful framework中自动生成API文档 一.Swagger概述 1.引言 当接口开发完成,紧接着需要编写接口文档.传统的接口文档使用Word编写,or一些接口文档管理平台 ...
- 如何在 Django REST Framework 中对分页结果过滤和排序?
作者 | 大江狗 责编 | 张文 来源 | Python Web 与 Django 开发 (ID:Python_Web_Django) 在本篇文章中我们将向你演示如何在 Django REST Fr ...
- Django REST Framework中的Serializer relations
官方文档原文 Relational fields are used to represent model relationships. They can be applied to ForeignKe ...
- 解决Django Rest Framework中的跨域问题
解决Django Rest Framework中的跨域问题 参考文章: (1)解决Django Rest Framework中的跨域问题 (2)https://www.cnblogs.com/qicu ...
- DRF (Django REST framework) 框架介绍
Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离 前后端分离 1 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控 ...
- DRF (Django REST framework) 框架介绍(3)
DRF中的Request 与 Response 1. Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST fra ...
- 在django restful framework中设置django model的property
众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...
- JWT验证机制【刘新宇】【Django REST framework中使用JWT】
JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证.我们不再使用Session认证机制,而使用Json Web Token认证机制. 什么是JWT Json web t ...
- 谈谈Django REST Framework(DRF)中的序列化器
摘要 Django REST Framework(DRF)是一个强大的工具,可以帮助我们构建和处理RESTful API.其中的序列化器(Serializers)是其核心组件之一,它允许我们快速有效地 ...
最新文章
- Python 技术篇-如何打印一段文字,用友云霸气控制台颜文字打印
- pandas明明数据有,但是通过该标签进行筛选的时候就得到空或者是错误的结果
- 反编译之将脱壳后的dex文件重新打包成apk
- oracle查询数据库启动时的参数文件,【Oracle】数据库启动阶段参数文件、控制文件的问题处理...
- 初学者 | 10个例子带你了解机器学习中的线性代数
- 送ta一朵独一无二的玫瑰花
- Powerful array CodeForces - 86D (莫队算法)
- oracle 根据分隔符提取,oracle自定义函数按照某个分隔符拆分字符串
- php支持ssi,让Apache支持SHTML(SSI)的配置方法
- oracle orm 实例 java_Oracle数据库的JDBC查询实例
- cocos2d-x学习 之四
- 咸菜可以吃吗,对健康有害吗?
- Loadrunner -27225错误
- mysql源码安装教程
- git 中文文件名乱码
- 转:普通继电器和自锁继电器的差别
- matlab2016 wavread,DSP MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住 频率和 点数;
2 238万源代码下载- www.pudn.com...
- 03 三维地图添加切片图层
- win10必须禁用的服务_WIN10优化小技巧
- 开学季·DGUT立Flag =W=
热门文章
- 【翻译】Ext JS 6 Beta发布
- 改善C#程序的建议6:在线程同步中使用信号量
- OpenStack环境搭建(一:Virtual Box 5.1 环境的安装及配置)
- jsp实现日历(二)
- java连接mysql8的坑
- C#Hello World
- Java基础教程(15)--枚举类型
- 比特币寒冬中,你更应该关注企业区块链!
- springMVC出现HTTP Status 405 - Request method 'GET' not supported错误的解决方法
- Template mode HTML5 has not been configured