2017-02-18 82 views
3

我做了一个API,并且想要让swagger doc。我不为此开发任何序列化。Django Rest Swagger APIView

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')), 
] 

我想所有扬鞭对此我没有得到的参数。

i am not able to get parameters

我使用:

Django的休息,招摇== 2.1.1

djangorestframework == 3.5.3

+0

所以你使用yaml文档,这个功能在django-swagger中不再被支持。我有同样的问题,如果你找到解决方案,你可以ping我吗? –

+0

@OleksandrDashkov好心地通过答案,并问是否仍然不回答您的疑问 –

+0

@RagulParani真的,我无法测试它,因为我已经切换到DRF的本机文档 –

回答

2

get_swagger_view()方法不给你的控件添加参数和描述到你的应用程序的网址

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

Core API schema generator

这将要求您创建的URL和应用程序中使用的参数的模式。

的招摇

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仔细查阅上述链接创建一个文件。

的招摇Docs创建的网址:

urls.py

url('^docs', swagger.schema_view) 
2

考虑使用GenericAPIView,而不是因为这将产生的文档。当端点与模型无关时,使用它会有些破绽,但确实有效。

作为一个例子,下面的代码将创建一个只接受post请求的端点,并使用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) 
相关问题