Django Rest Swagger APIView

Joh*_*ohn 8 django swagger django-rest-framework

我制作了一个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) 
Run Code Online (Sandbox Code Playgroud)

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')),
]
Run Code Online (Sandbox Code Playgroud)

我想得到Swagger的所有参数,我没有得到.

我无法获得参数

我在用:

Django的休息,招摇== 2.1.1

djangorestframework == 3.5.3

ode*_*den 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)
Run Code Online (Sandbox Code Playgroud)


Rag*_*ani 5

get_swagger_view()方法无法控制您向应用程序中的网址添加参数和说明

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

核心API模式生成器

这将需要您为应用程序中使用的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)
Run Code Online (Sandbox Code Playgroud)

有关说明coreapi.Documentcoreapi.Fieldcoreapi.Link敬请参见上述链接。

为swagger文档创建URL:

urls.py

url('^docs', swagger.schema_view)
Run Code Online (Sandbox Code Playgroud)