zoukankan      html  css  js  c++  java
  • 优化REST Framework 的 路由 APIView 和ViewSetMixin

     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<pk>d+)/$',course.CoursesView.as_view({'get':'retrieve'}))
    ]
  • 相关阅读:
    R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
    用R语言用Nelson Siegel和线性插值模型对债券价格和收益率建模
    R语言LME4混合效应模型研究教师的受欢迎程度
    R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
    R语言中的Nelson-Siegel模型在汇率预测的应用
    R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归
    LNMP搭建
    php高性能开发阅读笔记
    php 关于经纬度距离计算方法
    在已经部署svn 服务器上,搭建svn项目 成功版
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/9445536.html
Copyright © 2011-2022 走看看