首页 文章

Django Rest Swagger APIView

提问于
浏览
5

我制作了一个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

2 回答

  • 3

    get_swagger_view() 方法不允许您向应用中的网址添加参数和说明

    解决方法是使用 explicit schema definition . 您可以创建一个Document,它表示Core API架构容器 . 浏览以下链接 . 阅读Core 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文档创建网址:

    urls.py

    url('^docs', swagger.schema_view)
    
  • 4

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

    例如,以下代码将创建一个仅接受发布请求的 endpoints ,并使用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)
    

相关问题