【问题标题】:Django Rest Swagger APIViewDjango Rest Swagger APIView
【发布时间】:2017-07-07 19:17:17
【问题描述】:

我制作了一个 API,并想制作 swagger doc。我没有为此开发任何序列化。

Views.py

class DeliveryView(APIView):

    renderer_classes = (XMLRenderer,)

    def get_campaign_vast(self, request, *args):
        return response

    def get(self, request):
        return self.get_campaign_vast(request, data)

    def post(self, request):
        """ 
        This text is the description for this API
        ---
        param1 -- A first parameter
        param2 -- A second parameter
        """
        data = request.data
        return self.get_campaign_vast(request, data) 

urls.py

from django.conf.urls import url,include
from django.contrib import admin
from rest_framework_swagger.views import get_swagger_view

schema_view = get_swagger_view(title='Add Delivery')

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$',schema_view),
    url(r'^', include('deliverymanagment.urls')),
]

我想在 Swagger 中获取我没有得到的所有参数。

i am not able to get parameters

我正在使用:

django-rest-swagger==2.1.1

djangorestframework==3.5.3

【问题讨论】:

  • 所以您使用 yaml 文档,django-swagger 不再支持此功能。我也遇到了同样的问题,如果你找到解决办法,能ping我吗?
  • @OleksandrDashkov 请仔细阅读答案并询问是否仍然无法回答您的问题
  • @RagulParani 真的无法测试,因为我已经切换到 DRF 的原生文档

标签: django django-rest-framework swagger


【解决方案1】:

考虑改用GenericAPIView,因为这将生成文档。当端点与模型无关时,使用它有点小技巧,但它确实有效。

例如,以下代码将创建一个仅接受 post 请求并使用 seralizer 在 swagger 中记录的端点。

from rest_framework.generics import GenericAPIView

class SomeThing(GenericAPIView):
    serializer_class = MySerializer

    def post(self, request, *args, **kwargs):
        serializer = MySerializer(data=request.data)
        if serializer.is_valid() is False:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

        res = do_magic(**serializer.data)
        return Response(res)

【讨论】:

    【解决方案2】:

    get_swagger_view() 方法无法让您控制向应用中的 url 添加参数和描述

    解决方案是使用显式架构定义。您可以创建一个 Document,它是 Core API 模式容器的表示形式。通过以下链接。阅读核心 API 部分

    Core API schema generator

    这将要求您为应用程序中使用的 url 和参数创建架构。

    为swagger创建文件

    swagger.py

    from rest_framework.decorators import renderer_classes, api_view
    from rest_framework_swagger.renderers import OpenAPIRenderer, SwaggerUIRenderer
    import coreapi
    from rest_framework import response
    # noinspection PyArgumentList
    @api_view()
    @renderer_classes([SwaggerUIRenderer, OpenAPIRenderer])
    def schema_view(request):
        print("---inside schema view-----")
        # noinspection PyArgumentList
        schema = coreapi.Document(
        title='Your Title',
        url='Your host url',
        content={
            'search': coreapi.Link(
                url='/search/',
                action='get',
                fields=[
                    coreapi.Field(
                        name='from',
                        required=True,
                        location='query',
                        description='City name or airport code.'
                    ),
                    coreapi.Field(
                        name='to',
                        required=True,
                        location='query',
                        description='City name or airport code.'
                    ),
                    coreapi.Field(
                        name='date',
                        required=True,
                        location='query',
                        description='Flight date in "YYYY-MM-DD" format.'
                    )
                ],
                description='Return flight availability and prices.'
            )
        }
    )
        # schema = generator.get_schema(request)
        return response.Response(schema)
    

    关于coreapi.Documentcoreapi.Fieldcoreapi.Link的解释请参考上述链接。

    为 swagger 文档创建 url:

    urls.py

    url('^docs', swagger.schema_view)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2021-01-16
      • 2013-05-06
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多