Django rest framework 如何在Django REST中不针对视图集而是针对通用视图使用路由器?

Django rest framework 如何在Django REST中不针对视图集而是针对通用视图使用路由器?,django-rest-framework,Django Rest Framework,关于DjangoREST和routering,我有一个非常基本的问题 当我需要注册rest_framework.viewsets时,我会这样做(来自Documentton的示例): 但是如何添加到rest_framework.generics包中的路由器视图?我应该自定义路由器()吗?最佳做法是什么 但是如何添加到rest_framework.generics包中的路由器视图 你没有。ViewSets在rest\u framework.generics中添加了两个兼容层,以便使用路由器 我应该自

关于DjangoREST和routering,我有一个非常基本的问题

当我需要注册rest_framework.viewsets时,我会这样做(来自Documentton的示例):

但是如何添加到rest_framework.generics包中的路由器视图?我应该自定义路由器()吗?最佳做法是什么

但是如何添加到rest_framework.generics包中的路由器视图

你没有。ViewSets在rest\u framework.generics中添加了两个兼容层,以便使用路由器

我应该自定义路由器()吗?最佳做法是什么

如果您想使用非viewset视图,则需要编写常规的Django url

我的感觉是,真正的问题是完全不同的,可能是“如何将viewset限制为仅限于某些操作”

在这种情况下,
ModelViewSet
的声明提供了答案:

class ViewSet(ViewSetMixin, views.APIView):
    """
    The base ViewSet class does not provide any actions by default.
    """
    pass


class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
    """
    The GenericViewSet class does not provide any actions by default,
    but does include the base set of generic view behavior, such as
    the `get_object` and `get_queryset` methods.
    """
    pass


class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
    pass

如您所见,您可以通过选择所需的混合并从
GenericViewSet
继承来专门化
ModelViewSet

对于一般视图,它们不使用路由器,因为它们是基于类的源视图-

不过,这种模式是最好的。这个问题在我的脑海中浮现出来:幸运的是,你的答案假设你在使用模型,但情况并非总是如此。仅仅因为您有一个不在视图集中的视图,并不意味着该视图正在使用模型来生成渲染结果。它是否使用模型与此无关。可以在不使用模型的情况下使用视图集,但路由器仅适用于视图集。
class ViewSet(ViewSetMixin, views.APIView):
    """
    The base ViewSet class does not provide any actions by default.
    """
    pass


class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
    """
    The GenericViewSet class does not provide any actions by default,
    but does include the base set of generic view behavior, such as
    the `get_object` and `get_queryset` methods.
    """
    pass


class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
    pass