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,则会出现问题.我不知道应该怎么做.如果有人想出这个新问题的答案 - 随意评论我的答案.谢谢!
使用新版本的 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)
奥拉的回答是正确的.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)