12

DRF文档提到了这一点:

请注意,使用视图集时,基本文档字符串将用于所有生成的视图。要为每个视图提供描述,例如列表和检索视图,请使用 Schemas as documentation 中描述的文档字符串部分:示例。

但是链接很糟糕,类似的链接https://www.django-rest-framework.org/api-guide/schemas/没有提到这些“部分”。

当我的单个 Viewset 组成时,我如何清楚地记录我不同的可能 REST 操作,

class ViewSet(mixins.ListModelMixin,                                            
              mixins.RetrieveModelMixin,                                        
              mixins.CreateModelMixin,                                          
              mixins.UpdateModelMixin,                                        
              ):       
4

2 回答 2

18

在花了很长时间追踪这个之后,我从谷歌来到这里。文档字符串确实有一种特殊的格式来记录 ViewSet 的各个方法。

相关示例必须在某些时候从文档中删除,但我能够在源代码中找到它。它由https://github.com/encode/django-rest-framework/blob/master/rest_framework/schemas/coreapi.pyget_description中的函数处理

文档字符串格式基于操作名称(如果定义了 view.action):

"""
General ViewSet description

list: List somethings

retrieve: Retrieve something

update: Update something

create: Create something

partial_update: Patch something

destroy: Delete something
"""

如果 view.action 没有定义,它会回退到方法名:get, put, patch, delete

每个新部分都以小写 HTTP 方法名称开头,后跟冒号。

于 2019-10-17T15:04:29.207 回答
6

每个 mixin 都有特定的方法,如mixins.ListModelMixin使用list方法。因此,您可以像这样明确指定文档;

    class ViewSet(mixins.ListModelMixin,                                            
                  mixins.RetrieveModelMixin,                                        
                  mixins.CreateModelMixin,                                          
                  mixins.UpdateModelMixin,):
        queryset = Model.objects.all()
        serializer_class = Serializer
        ...


        def list(self, request, *args, **kwargs):
            """ 
            This endpoints returns list of objects...
            """
            return super(ViewSet, self).list(request, *args, **kwargs)

如果您没有任何特定逻辑,则调用该super()方法。

  • mixins.RetrieveModelMixin利用retrieve
  • mixins.CreateModelMixin使用create
  • mixins.UpdateModelMixin使用update方法。
于 2019-08-06T06:32:35.203 回答