关于drf里面的generics、mixins、viewsets、router的区别

一、mixins

1.首先介绍mixins,mixins里面创建了许多的方法,list、retrieve、updata、destroy等方法,都返回的是Response
在这里插入图片描述

二、generics

  1. 有基本的GenericsAPIView 类,里面都是加了一些的方法和参数,这里只是继承了drf的APIView,APIView又继承了django的View
  2. 除了基本的GenericsAPIView类,其他类都是继承mixins的类和GenericsAPIView类,并将mixins类里面的方法和http请求的方法(GET,POST,PUT,DELETE等)结合起来,例如将get方法和mixins的类里面的list方法结合起来
    在这里插入图片描述
  3. generics起到了将mixins类里面的方法和http请求的方法结合起来的作用

三、viewsets

  1. viewsets也是在到它本身的基本的ViewSetMixin类里面加了更多的功能到方法里,GenericViewSet类继承了viewsets基本的ViewSetMixin类和 generics的GenericAPIView类,但是并没有将这些类里面的方法与http的方法绑定起来在这里插入图片描述
  2. 通过在urls.py中配置,就可以绑定
goods_list = GoodsListViewSet.as_view({
    'get': 'list',
})

urlpatterns = [
    url(r'goods/$', goods_list, name='goods_list'),
]

四、router

  1. 当我们的系统加大,url会越来越多,上面的viewsets中的urls.py中配置会越来越多,不便于我们管理,所以引入了router进行管理在这里插入图片描述
    例子:
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from goods.views import GoodsListViewSet

router = DefaultRouter()
router.register(r'goods', GoodsListViewSet)

urlpatterns = [
    path('', include(router.urls)),
]
  1. 在router里面它会将我们所需要的list方法,create方法都会自动帮我们绑定到http的方法上面,我们后续所需要的url,只需要这样配置就行了,只需注册就行了
router.register(r'goods', GoodsListViewSet)
原文地址:https://www.cnblogs.com/hjjjjh/p/13251473.html