当前位置:  开发笔记 > 编程语言 > 正文

如何从API文档中排除视图?

如何解决《如何从API文档中排除视图?》经验,为你挑选了1个好方法。

我使用django-rest-framework(DRF)来提供我的站点的REST API.据我所知,自动生成API文档依赖于DRF生成的模式.然后可以通过第三方工具解释它以生成漂亮的文档.我用作django-rest-swagger从DRF模式生成漂亮文档的工具,但我怀疑我的问题的解决方案是基于DRF的,独立于我用来将模式转换为"漂亮"的任何工具.

问题是默认情况下,DRF提供整个API的文档,即使它的某些部分确实是我的网站自己的内部目的.我希望从文档中排除一些观点.应始终排除某些观点.仅当查看文档的用户未登录到站点时,才应排除某些视图.



1> Louis..:

这没有很好的记录.在基于类的视图上,您​​可以将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.requestRequest用户要求提供文档时生成的对象.我们使用rest_framework.permissions直接提供的类之一,因为生成模式的代码不使用permission_classes可能设置的属性SomeViewSet.


不建议使用exclude_from_schema。对于基于函数的视图,应使用“ schema = None”和“ @schema(None)”。
推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有