从Django REST Swagger中排除URL

Dav*_*own 15 python django rest swagger

我有几个URL要从REST API文档中排除.我正在使用Django REST Swagger,我能找到的唯一文档(https://github.com/marcgibbons/django-rest-swagger)并没有真正告诉我.在settings.py中有SWAGGER_SETTINGS的"exclude_namespaces"部分,但没有真正的解释或如何使用它的示例.

简而言之,我想从以下开头的文档中排除任何网址:

/api/jobs/status/
/api/jobs/parameters/
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

提前感谢您提供的任何帮助:P

Lau*_*iel 17

要排除的名称空间是urls.py中定义的名称空间.

例如,在您的情况下:

urls.py:

internal_apis = patterns('',
                     url(r'^/api/jobs/status/',...),
                     url(r'^/api/jobs/parameters/',...),
                     )

urlpatterns = urlpatterns + patterns('',
              url(r'^', include(internal_apis, namespace="internal_apis")),
              ...
              )
Run Code Online (Sandbox Code Playgroud)

并在您的settings.py中:

SWAGGER_SETTINGS = {
    "exclude_namespaces": ["internal_apis"],    #  List URL namespaces to ignore
}
Run Code Online (Sandbox Code Playgroud)

在那里有很好的描述


Ola*_*Van 14

对于那些发现上述答案没有帮助的人:我认为"exclude_namespaces"在新版本的django swagger中不再起作用.我有几乎相同的问题(我不想在文档中显示我的内部apis)并且上述解决方案对我不起作用.我一直在寻找一个小时的解决方案,最后找到了一些有用的东西.

您可以将一些属性传递给SchemaGenerator.其中一个是urlconf.你可以将它设置为"yourproject.api.urls",它只会在那里定义网址!当然,您必须确保要从api文档中排除的所有URL都不包含在那里.

我希望至少有一个人发现我的答案很有帮助;).

如果您想在api文档中包含许多urls.py,则会出现问题.我不知道应该怎么做.如果有人想出这个新问题的答案 - 随意评论我的答案.谢谢!

  • 您还可以通过将“schema = None”添加到其属性来禁用特定视图。 (2认同)

Suy*_*arg 8

使用新版本的 django swagger,我们不需要创建视图来排除某些 url。下面的代码将禁用 test2 url。

from rest_framework_swagger.views import get_swagger_view
urlpatterns1 = [
    url(r'^', include(router.urls)),
    url(r'^test/', include('test.urls')),
    url(r'^test1/', Test2.as_view()),
]

schema_view = get_swagger_view(title='API Documentation', patterns=urlpatterns1)

urlpatterns = urlpatterns1 + [
    url(r'^docs/', schema_view),
    url(r'^test2/', Test2.as_view()),
]
Run Code Online (Sandbox Code Playgroud)


Jih*_*aek 6

奥拉的回答是正确的.exclude_namespaces不再受支持.

要更好地控制文档,请使用基于函数或基于类的视图创建自己的模式视图.如果要生成特定URL模式或URL confs的文档,这可能很有用.

在您的中views.py,您可以执行以下操作:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.schemas import SchemaGenerator
from rest_framework_swagger import renderers

class SwaggerSchemaView(APIView):
    renderer_classes = [
        renderers.OpenAPIRenderer,
        renderers.SwaggerUIRenderer
    ]

    def get(self, request):
        generator = SchemaGenerator(title='Your API Documentation', urlconf='your_app.urls')
        schema = generator.get_schema(request=request)

    return Response(schema)
Run Code Online (Sandbox Code Playgroud)

以上只会呈现在urlconf参数中指定的URL的文档SchemaGenerator.另外,不要忘记设置你的urls.py:

from django.conf.urls import url
from views import SwaggerSchemaView

urlpatterns = [
    url(r'^api/v1/docs/$', SwaggerSchemaView.as_view(), name='docs'),
]
Run Code Online (Sandbox Code Playgroud)