我使用django-rest-framework(DRF)来提供我的站点的REST API。据我所知,自动生成API文档依赖于DRF生成schema。然后可以通过第三方工具解释它以生成漂亮的文档。我使用django-rest-swagger
作为从DRF架构生成漂亮文档的工具,但我怀疑我的问题的解决方案是基于DRF的,独立于我用于转换架构的任何工具某事"漂亮"。
问题在于,默认情况下,DRF提供整个API的文档,即使它的某些部分确实是我的网站自己的内部目的。 我希望从文档中排除一些观点。应始终排除某些观看次数。仅当查看文档的用户未登录到站点时,才应排除某些视图。
答案 0 :(得分:8)
这还没有很好的记录。在基于类的视图中,您可以将exclude_from_schema
属性设置为True
以从文档中排除视图。例如:
from rest_framework import viewsets, mixins
class SomeViewSet(mixins...., viewsets.GenericViewSet):
exclude_from_schema = True
[...]
如果您搜索exclude_from_schema
的当前文档,则会找到一个匹配here,其中记录了@api_view
装饰器的参数的存在,该参数具有以下效果:如上所示设置属性。 DRF的文档中目前没有提及该属性本身。
如果要根据条件排除视图 ,可以使用@property
装饰器,以便exclude_from_schema
成为计算属性。在幕后,当DRF需要为视图生成模式时,它将使用在用户浏览到文档页面时生成的Request
对象来实例化该类。因此,您可以进行测试以检查访问文档的用户是否经过身份验证:
from rest_framework import viewsets, mixins, permissions
class SomeViewSet(mixins...., viewsets.GenericViewSet):
@property
def exclude_from_schema(self):
return not permissions.IsAuthenticated().has_permission(self.request,
self)
[...]
self.request
是用户要求提供文档时生成的Request
对象。我们直接使用rest_framework.permissions
提供的类之一,因为生成架构的代码不使用permission_classes
上可能设置的SomeViewSet
属性。