博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优化REST Framework 的 路由 APIView 和ViewSetMixin
阅读量:5770 次
发布时间:2019-06-18

本文共 1475 字,大约阅读时间需要 4 分钟。

 APIview:

  我们经常写的是view  这个APIview继承了我们的view,并且对请求进来的信息进行设置,

在APIView这个例子中,调用了drf本身的serializer以及Response方法。
  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
\d+)/$',course.CoursesView.as_view({
'get':'retrieve'}))]

 

转载于:https://www.cnblogs.com/zhaoyunlong/p/9445536.html

你可能感兴趣的文章
使用MySQLTuner-perl对MySQL进行优化
查看>>
Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化 ...
查看>>
开发网络视频直播系统需要注意的地方
查看>>
haproxy mysql实例配置
查看>>
强化学习的未来— 第一部分
查看>>
TableStore:用户画像数据的存储和查询利器
查看>>
2019 DockerCon 大会即将召开,快来制定您的专属议程吧!
查看>>
15分钟构建超低成本数据大屏:DataV + DLA
查看>>
jSearch(聚搜) 1.0.0 终于来了
查看>>
盘点2018云计算市场,变化大于需求?
查看>>
极光推送(一)集成
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
@Transient注解输出空间位置属性
查看>>
Ansible-playbook 条件判断when、pause(学习笔记二十三)
查看>>
5种你未必知道的JavaScript和CSS交互的方法(转发)
查看>>
线程进程间通信机制
查看>>
galera mysql 多主复制启动顺序及命令
查看>>
JS prototype 属性
查看>>
中位数性质——数列各个数到中位数的距离和最小
查看>>
WebApp之Meta标签
查看>>