优化REST Framework 的 路由 APIView 和ViewSetMixin
APIview:
我们经常写的是view 这个APIview继承了我们的view,并且对请求进来的信息进行设置,
APIView对django本身的View进行封装,从上述的代码,这样分析,两者的差别看起来不是很大,但实际中APIView做了很多东西,它定义了很多属性与方法,举几个例子
# 这三个是常用的属性
authentication_classes : 用户登录认证方式,session或者token等等
permission_classes : 权限设置,是否需要登录等
throttle_classes : 限速设置,对用户进行一定的访问次数限制等等。
我们可以点击APIview进去 然后找到其中的奥妙,读取到restframework的具体源码
ViewSetMixin
你平时在写url的比如一个get 有带参数 有不带参数的 那么 我们不仅仅要写两个url还要写两个类
这个时候我们的 就可以继承 ViewSetMixin 来解决了
继承的时候 ViewSetMixin 必须要放在继承的最前面 因为你同时继承 ViewSetMixin 和APIView的时候 他们同时都有as_view()方法 ,这个时候我们就要先用 ViewSetMixin 中的as_view所以他要写在前面
这个是用来让你的url中的as_view中直接设置你的请求的方式的对应的方法 我们在下面可以把我们的post get的请求的方式对应的方法名给改变 我们先导入 :
from rest_framework.viewsets import ViewSetMixin # 这个是用来让你的url中的as_view中直接设置你的请求的方式的对应的方法 我们在下面可以把我们的post get的请求的方式对应的方法名给改变
然后我们下面的vies中的发的方法就可以自定义名字了:

我们的这个方法也要在url中声明:

这就是设置不同的请求方式 对应不同的方法
这样就会省去一个类 两个url对应同一个 请求类
ListModelMixin,GenericViewSet 搭配用法:
class Course(ListModelMixin,GenericViewSet):
queryset = models.Course.objects.all() #queryset是封装的方法
def list(self,request,*args,**kwargs): # 这个时候的list就是自带的 也可以重写告诉url他的请求就是list
course_list = models.Course.objects.all() # 我们也可以进行重写 queryset
urls:
urlpatterns = [
url(r'courses/$',course.CoursesView.as_view({'get':'list'})), # 告诉它 它的get就去找list
url(r'courses/(?P<pk>\d+)/$',course.CoursesView.as_view({'get':'retrieve'}))
]
优化REST Framework 的 路由 APIView 和ViewSetMixin的更多相关文章
- django-rest-framework-源码解析003-视图家族和路由(APIView/GenericAPIView/mixins/generics/viewsets)
视图家族 视图家族在rest_framework源码位置和学习曲线为: rest_framework.views: 基本视图(APIView) rest_framework.generics: 工具视 ...
- rest framework 之路由系统
一.自定义路由 1.urls.py from django.conf.urls import url, include from web.views import s11_render urlpatt ...
- rest framework之路由组件
一.路由组件的使用 1.使用实例 在视图中继承GenericViewSet类来完成功能时,需要自己对路由的写法有所改变,需要在as_view中传入actions字典参数: re_path('books ...
- django的rest framework框架——分页、视图、路由、渲染器
一.rest framework的分页 1.使用rest framework内置类PageNumberPagination实现分类 from django.conf.urls import url f ...
- vue项目性能优化(路由懒加载、gzip加速、cdn加速)
前端工程性能优化一说意义深远悠长,本章主要介绍除了一些基础优化外如何实行路由懒加载.Gzip加速.CDN加速,让网页飞的快一些. 基础优化 老生常谈的一些: 不要在模板中写复杂的表达式 慎用watch ...
- rest framework之APIView
一.rest framework配置 1.安装rest framework 在django环境中安装rest-framework框架: (automatic) C:\Users\Administrat ...
- django rest framework restful 规范
内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...
- Django Rest framework 之 视图
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- 19-视图集ViewSet和路由Routers
一.视图集ViewSet 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: 1.list()提供一组数据 2.retrieve()提供单个数据 3.create()创建数据 4.up ...
随机推荐
- java学习--Reflection反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- .Net Core全球化多语言
参照:ASP.NET Core 全球化和本地化 步骤如下: 后台中的本地化. Startup.cs中注册服务并制定Resource文件的位置.注意:这里的位置不仅仅应用到Web层,如Infrastru ...
- springMVC实现json
很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互. 一.概要 JSON(JavaScri ...
- chrome和IE下的滚动条样式修改
火狐下的滚动条样式无法去修改,但chorme下的则可以任意修改,惊喜的是IE竟然是最早实现这一功能的浏览器,IE5都能有效果. chorme下的滚动条样式修改: <!DOCTYPE html&g ...
- ruby实现下订单后给客户发送手机序列号
还有半个小时下班,写点今天做的功能,打发打发时间. 两个类,订单类和序列号类. 订单类 class GroupOrder include Mongoid::Document include Mongo ...
- Rails 建立一个资源
在blog 应用程序中.你可以通过脚手架(scaffolded)开始建立一个资源. 这将是单一的blog 提交.请输入以下命令 $ rails generate scaffold Post name: ...
- hadoop学习笔记(五):HDFS Shell命令
一.HDFS文件命令 以下是比较重要的一些命令: [root@master01 hadoop]# hadoop fs -ls / //查看根目录下的所有文件 [root@master01 hadoop ...
- C# Mysql Dapper和原生sql 插入和查询速度比较
1.表中有三个字段,已经有100多万条数据,每次插入10万条数据 时间单位:秒 秒 Dapper批量Model插入时间:40.6165513,Dapper单条Model插入时间:95.9492972, ...
- Mybatis源码正确打开方式
精心挑选要阅读的源码项目: 饮水思源——官方文档,先看文档再看源码: 下载源码,安装到本地,保证能编译运行: 从宏观到微观,从整体到细节: 找到入口,抓主放次,梳理核心流程: 源码调试,找到核心数据结 ...
- 在SecureCRT中给linux上传和下载文件
下载:sz中的s意为send(发送),告诉客户端,我(服务器)要发送文件 send to cilent,就等同于客户端在下载. 上传:rz中的r意为received(接收),告诉客户端,我(服务器)要 ...