Исключить документы о подмене для определенных методов HTTP - PullRequest
0 голосов
/ 15 октября 2018

Я использую drf-yasg , чтобы сгенерировать документацию для моего REST API Django.У меня есть пара конечных точек, items / с методами GET, POST и DELETE;и предметов / только с методом УДАЛИТЬ.Тем не менее, сгенерированные документы swagger по ошибке включают в себя также GET и POST для последней конечной точки.

Это фрагмент того, что у меня есть в urls.py:

urlpatters = [
    url(r'^items/$', views.ItemViewSet.as_view()),
    path('items/<uuid:itemID>', views.ItemViewSet.as_view()),
]

views.py содержит что-токак:

class ItemViewSet(mixins.DestroyModelMixin, GenericAPIView):
    def get(self, request):
            # ...
            return Response(HTTP_200_OK)

    def post(self, request):
            # ...
            return Response(status=status.HTTP_201_CREATED)

    def delete(self, request, itemID):
             # ...
             return Response(status=status.HTTP_204_NO_CONTENT)

    def delete(self, request):
            # ...
            return Response(status=status.HTTP_204_NO_CONTENT)

Как я могу исключить GET и POST из элементов / документация?

Я прочитал https://github.com/axnsan12/drf-yasg/blob/master/docs/custom_spec.rst и Исключить URL-адреса из Django REST Swagger , но еще не нашел работающего решения.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Вы можете исключить и конечную точку API из документации, установив swagger_schema = None в вашем views.py

  class MyView(generics.ListCreateAPIView):
    """MyView class doc."""
    swagger_schema = None

    def get(self, response):
        # Do stuff here

Источник: https://github.com/axnsan12/drf-yasg/commit/a211184478e6f0ca348312438c9c29d7b535b0fa

0 голосов
/ 12 марта 2019

Мое хакерское решение:

class SwaggerAutoSchemaMethodExclusion(SwaggerAutoSchema):
    read_op_counter = 0
    create_op_counter = 0       

    def get_operation(self, operation_keys):
        if "create" in in operation_keys:
            SwaggerAutoSchemaMethodExclusion.create_op_counter += 1
            if SwaggerAutoSchemaMethodExclusion.create_op_counter % 2 == 0:
                return None
        elif "read" in operation_keys:
            SwaggerAutoSchemaMethodExclusion.read_op_counter += 1
            if SwaggerAutoSchemaMethodExclusion.read_op_counter % 2 == 0:
                return None

        return super().get_operation(operation_keys)


class ItemViewSet(mixins.DestroyModelMixin, GenericAPIView):
    swagger_schema = SwaggerAutoSchemaMethodExclusion
    // ...
...