Django REST Framework Swagger 2.0

С трудом настраивая Swagger UI Вот очень поясняющие документы:https://django-rest-swagger.readthedocs.io/en/latest/

Строки документации YAML устарели. Кто-нибудь знает, как настроить Swagger UI из кода Python? или какой файл я должен изменить на конечные точки группы API, чтобы добавить комментарии к каждой конечной точке, чтобы добавить поля параметров запроса в Swagger UI?

 Steve24 июл. 2016 г., 11:38
У вас есть пример того, какую группировку вы хотите сделать, например, на другом API на основе Swagger? Swagger может быть довольно ограниченным с точки зрения группировки - я написал специально для этого шаблоны. Я представляю комментарии, добавленные из строк документации по методам конечных точек. Параметры запроса должны появляться, если они правильно определены ... хотя я смутно помню, что существуют обстоятельства, когда их нет.

Ответы на вопрос(1)

Решение Вопроса

Вот как мне удалось это сделать:

база urls.py

urlpatterns = [
...
url(r'^api/', include('api.urls', namespace='api')),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
...
]

api.urls.py

urlpatterns = [
url(r'^

api.views.py. В MyOpenAPIRenderer я обновляю данные, чтобы добавить описание, поля запроса и обновить тип или требуемые функции.

class MyOpenAPIRenderer(OpenAPIRenderer):
    def add_customizations(self, data):
        super(MyOpenAPIRenderer, self).add_customizations(data)
        data['paths']['/article/{name}/{pk}/']['get'].update(
            {'description': 'Some **description**',
             'parameters': [{'description': 'Add some description',
                             'in': 'path',
                             'name': 'pk',
                             'required': True,
                             'type': 'integer'},
                            {'description': 'Add some description',
                             'in': 'path',
                             'name': 'name',
                             'required': True,
                             'type': 'string'},
                            {'description': 'Add some description',
                             'in': 'query',
                             'name': 'a_query_param',
                             'required': True,
                             'type': 'boolean'},
                            ]
             })
        # data['paths']['/article/{pk}/']['get'].update({...})
        data['basePath'] = '/api'  

@api_view()
@renderer_classes([MyOpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
    generator = SchemaGenerator(title='A title', urlconf='api.urls')
    schema = generator.get_schema(request=request)
    return Response(schema)


class ArticleDetailApiView(ViewSet):

    @detail_route(renderer_classes=(StaticHTMLRenderer,))
    def get_article_by_id(self, request, pk):
        pass

    @detail_route(renderer_classes=(StaticHTMLRenderer,))
    def get_article(self, request, name, pk):
        pass

обновление для django-rest-swagger (2.0.7): заменить толькоadd_customizations сget_customizations.

views.py

class MyOpenAPIRenderer(OpenAPIRenderer):
    def get_customizations(self):
        data = super(MyOpenAPIRenderer, self).get_customizations()
        data['paths'] = custom_data['paths']
        data['info'] = custom_data['info']
        data['basePath'] = custom_data['basePath']
        return data

Вы можете прочитатьчванство спецификация создавать пользовательские данные.

, schema_view, name='swagger'), url(r'^article/(?P<pk>[0-9]+)/

api.views.py. В MyOpenAPIRenderer я обновляю данные, чтобы добавить описание, поля запроса и обновить тип или требуемые функции.

class MyOpenAPIRenderer(OpenAPIRenderer):
    def add_customizations(self, data):
        super(MyOpenAPIRenderer, self).add_customizations(data)
        data['paths']['/article/{name}/{pk}/']['get'].update(
            {'description': 'Some **description**',
             'parameters': [{'description': 'Add some description',
                             'in': 'path',
                             'name': 'pk',
                             'required': True,
                             'type': 'integer'},
                            {'description': 'Add some description',
                             'in': 'path',
                             'name': 'name',
                             'required': True,
                             'type': 'string'},
                            {'description': 'Add some description',
                             'in': 'query',
                             'name': 'a_query_param',
                             'required': True,
                             'type': 'boolean'},
                            ]
             })
        # data['paths']['/article/{pk}/']['get'].update({...})
        data['basePath'] = '/api'  

@api_view()
@renderer_classes([MyOpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
    generator = SchemaGenerator(title='A title', urlconf='api.urls')
    schema = generator.get_schema(request=request)
    return Response(schema)


class ArticleDetailApiView(ViewSet):

    @detail_route(renderer_classes=(StaticHTMLRenderer,))
    def get_article_by_id(self, request, pk):
        pass

    @detail_route(renderer_classes=(StaticHTMLRenderer,))
    def get_article(self, request, name, pk):
        pass

обновление для django-rest-swagger (2.0.7): заменить толькоadd_customizations сget_customizations.

views.py

class MyOpenAPIRenderer(OpenAPIRenderer):
    def get_customizations(self):
        data = super(MyOpenAPIRenderer, self).get_customizations()
        data['paths'] = custom_data['paths']
        data['info'] = custom_data['info']
        data['basePath'] = custom_data['basePath']
        return data

Вы можете прочитатьчванство спецификация создавать пользовательские данные.

, ArticleDetailApiView.as_view(actions={'get': 'get_article_by_id'}), name='article_detail_id'), url(r'^article/(?P<name>.+)/(?P<pk>[0-9]+)/

api.views.py. В MyOpenAPIRenderer я обновляю данные, чтобы добавить описание, поля запроса и обновить тип или требуемые функции.

class MyOpenAPIRenderer(OpenAPIRenderer):
    def add_customizations(self, data):
        super(MyOpenAPIRenderer, self).add_customizations(data)
        data['paths']['/article/{name}/{pk}/']['get'].update(
            {'description': 'Some **description**',
             'parameters': [{'description': 'Add some description',
                             'in': 'path',
                             'name': 'pk',
                             'required': True,
                             'type': 'integer'},
                            {'description': 'Add some description',
                             'in': 'path',
                             'name': 'name',
                             'required': True,
                             'type': 'string'},
                            {'description': 'Add some description',
                             'in': 'query',
                             'name': 'a_query_param',
                             'required': True,
                             'type': 'boolean'},
                            ]
             })
        # data['paths']['/article/{pk}/']['get'].update({...})
        data['basePath'] = '/api'  

@api_view()
@renderer_classes([MyOpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
    generator = SchemaGenerator(title='A title', urlconf='api.urls')
    schema = generator.get_schema(request=request)
    return Response(schema)


class ArticleDetailApiView(ViewSet):

    @detail_route(renderer_classes=(StaticHTMLRenderer,))
    def get_article_by_id(self, request, pk):
        pass

    @detail_route(renderer_classes=(StaticHTMLRenderer,))
    def get_article(self, request, name, pk):
        pass

обновление для django-rest-swagger (2.0.7): заменить толькоadd_customizations сget_customizations.

views.py

class MyOpenAPIRenderer(OpenAPIRenderer):
    def get_customizations(self):
        data = super(MyOpenAPIRenderer, self).get_customizations()
        data['paths'] = custom_data['paths']
        data['info'] = custom_data['info']
        data['basePath'] = custom_data['basePath']
        return data

Вы можете прочитатьчванство спецификация создавать пользовательские данные.

, ArticleDetailApiView.as_view(actions={'get': 'get_article'}), name='article_detail'), ]

api.views.py. В MyOpenAPIRenderer я обновляю данные, чтобы добавить описание, поля запроса и обновить тип или требуемые функции.

class MyOpenAPIRenderer(OpenAPIRenderer):
    def add_customizations(self, data):
        super(MyOpenAPIRenderer, self).add_customizations(data)
        data['paths']['/article/{name}/{pk}/']['get'].update(
            {'description': 'Some **description**',
             'parameters': [{'description': 'Add some description',
                             'in': 'path',
                             'name': 'pk',
                             'required': True,
                             'type': 'integer'},
                            {'description': 'Add some description',
                             'in': 'path',
                             'name': 'name',
                             'required': True,
                             'type': 'string'},
                            {'description': 'Add some description',
                             'in': 'query',
                             'name': 'a_query_param',
                             'required': True,
                             'type': 'boolean'},
                            ]
             })
        # data['paths']['/article/{pk}/']['get'].update({...})
        data['basePath'] = '/api'  

@api_view()
@renderer_classes([MyOpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
    generator = SchemaGenerator(title='A title', urlconf='api.urls')
    schema = generator.get_schema(request=request)
    return Response(schema)


class ArticleDetailApiView(ViewSet):

    @detail_route(renderer_classes=(StaticHTMLRenderer,))
    def get_article_by_id(self, request, pk):
        pass

    @detail_route(renderer_classes=(StaticHTMLRenderer,))
    def get_article(self, request, name, pk):
        pass

обновление для django-rest-swagger (2.0.7): заменить толькоadd_customizations сget_customizations.

views.py

class MyOpenAPIRenderer(OpenAPIRenderer):
    def get_customizations(self):
        data = super(MyOpenAPIRenderer, self).get_customizations()
        data['paths'] = custom_data['paths']
        data['info'] = custom_data['info']
        data['basePath'] = custom_data['basePath']
        return data

Вы можете прочитатьчванство спецификация создавать пользовательские данные.

 Melvic Ybanez12 мая 2017 г., 12:16
В последнем примере этоcustom_data определяемые пользователем?
 oden15 дек. 2016 г., 02:12
Не уверен, к какой версии относится этот патч, но django-rest-swagger == 2.1.0 не содержитadd_customizations или любая похожая именованная функция, которая содержит переменную data, описанную выше
 bitnik16 мая 2017 г., 17:17
Да, вы можете посмотреть на спецификацию чванства, чтобы создать ее, как указано в ответе.
 bitnik16 мар. 2017 г., 09:15
я обновил ответ
 Apoorv Kansal05 дек. 2016 г., 07:56
Где именно вы нашлиadd_customizations? Я не могу найти его в исходном коде вообще. В результате это решение не работает для меня.

Ваш ответ на вопрос