优化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 ...
随机推荐
- Chapter 3 Phenomenon——18
My intuition flickered; the doctor was in on it. 我的直觉告诉我:这个医生也参与了. 我灵光一闪:这医生熟悉内情. "I'm afraid t ...
- WPF 进程间传递参数
WPF 进程间传递参数 在软件开发中有时需要在一个软件中启动另一个软件,这时用Process.Start(“软件路径”)可以启动另一个软件.如果在这个过程中还需要传递一些参数给新启动 ...
- Fiddler——PC上实现手机的抓包(转载 http://www.jianshu.com/p/13f8a81d7c7c)
Fiddler是15年初,在千牛中做超级促销插件时,发现没有root的Android机和没有越狱的iPhone无法修改host,因此没办法测试.为了让我这个磨人的PD也能看到,开发推荐了Fiddler ...
- 关于打开fiddler后电脑无法正常上网的解决办法(fiddler抓包时的设置)
关于fiddler如何抓取 ie内容(其中:360浏览器和qq浏览器均使用ie内核) 1.打开fiddler,进入tools-options,设置如下.这样配置后,打开fiddler,fiddler ...
- 什么是汉明窗?加Hanmming窗的作用?
什么是汉明窗?加Hanmming窗的作用? 1.什么是汉明窗? 答:我是做语音识别的,我就从语音的角度跟你说一下吧. 语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的.为了处理语音信号, ...
- .NET环境下使用水晶报表
.NET环境下使用水晶报表 听语音 | 浏览:3280 | 更新:2013-12-20 13:36 1 2 3 4 5 6 7 分步阅读 水晶报表(Crystal Reports)-商务智能软件,通常 ...
- 让自己的程序支持livewriter
参考 http://www.cnblogs.com/Dah/archive/2007/04/02/697312.html 使用MetaWeblog. 在上面的博客里,基本说明了如何设置. 根据cn ...
- 从一个带有http://网络文件中获取文件名
例如文件网址为: http://a.hiphotos.baidu.com/image/h%3D200/sign=c3da85e50123dd543e73a068e108b3df/80cb39dbb6f ...
- java基础之基础语法详录
[前言] java的语法先从基础语法学,Java语言是由类和对象组成的,其对象和类又是由方法和变量组成,而方法,又包含了语句和表达式. 对象:(几乎)一切都是对象,比如:一只熊猫,他的外观,颜色,他在 ...
- js判断用户是否离开当前页面
简介 VisibilityChange 事件:用于判断用户是否离开当前页面 Code // 页面的 visibility 属性可能返回三种状态 // prerender,visible 和 hidde ...