我使用django-rest-framework(DRF)来提供我的站点的REST API.据我所知,自动生成API文档依赖于DRF生成的模式.然后可以通过第三方工具解释它以生成漂亮的文档.我用作django-rest-swagger
从DRF模式生成漂亮文档的工具,但我怀疑我的问题的解决方案是基于DRF的,独立于我用来将模式转换为"漂亮"的任何工具.
问题是默认情况下,DRF提供整个API的文档,即使它的某些部分确实是我的网站自己的内部目的.我希望从文档中排除一些观点.应始终排除某些观点.仅当查看文档的用户未登录到站点时,才应排除某些视图.
这没有很好的记录.在基于类的视图上,您可以将exclude_from_schema
属性设置为True
从文档中排除视图.例:
from rest_framework import viewsets, mixins class SomeViewSet(mixins...., viewsets.GenericViewSet): exclude_from_schema = True [...]
如果你搜索当前的文档,exclude_from_schema
你会在这里找到一个命中,它记录了@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
.