Django Rest Swagger APIView

时间:2017-02-18 06:26:44

标签: django django-rest-framework swagger

我制作了一个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的静止-招摇== 2.1.1

     

djangorestframework == 3.5.3

2 个答案:

答案 0 :(得分:6)

请考虑使用GenericAPIView,因为这会生成文档。当端点与模型无关时,使用它有点麻烦,但确实有效。

作为示例,以下代码将创建一个仅接受发布请求的端点,并使用seralizer在swagger中进行记录。

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)

答案 1 :(得分:5)

\U$1\E方法无法让您控制将参数和说明添加到应用中的网址

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

Core API schema generator

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

为swagger创建文件

  

swagger.py

get_swagger_view()

有关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.Field请参阅上述链接。

为swagger文档创建网址:

  

urls.py

coreapi.Link