Django rest swagger_auto_schema 自定义响应体

Ahm*_*oor 5 django swagger django-rest-framework

我已经覆盖了 django rest 视图中的 list 函数来自定义响应主体(它返回一个 json 数组,我想返回一个包含该数组的对象)我也想将此响应放在 swagger doc 中!我在 Django 中使用 drf_yasg 应用程序。我写了这段代码:

from drf_yasg.openapi import Schema, TYPE_OBJECT, TYPE_STRING, TYPE_ARRAY
from drf_yasg.utils import swagger_auto_schema
class StudentViewSet(viewsets.ModelViewSet):
    @swagger_auto_schema(responses={200: Schema(type=TYPE_OBJECT)})
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(queryset, many=True)
        return Response({'students': serializer.data})
Run Code Online (Sandbox Code Playgroud)

我不知道如何将我的响应对象描述提供给 Schema 对象。我搜索了很多,但没有发现任何有用的东西!

Sum*_*pta 6

首先导入这些包/模块。

from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from rest_framework import status
Run Code Online (Sandbox Code Playgroud)

下面的代码在函数视图上方使用作为装饰器

login_schema = openapi.Schema(
    type=openapi.TYPE_OBJECT,
    properties={
        'usernmae': openapi.Schema(type=openapi.TYPE_STRING, description='string'),
        'password': openapi.Schema(type=openapi.TYPE_STRING, description='string'),
    },
    required=['username', 'password']
)
login_schema_response = {
    status.HTTP_200_OK: openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
           'students': openapi.Schema(type=openapi.TYPE_OBJECT)
        }
    ),
    status.HTTP_201_CREATED: openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
           'students': openapi.Schema(type=openapi.TYPE_OBJECT)
        }
    ),
}

@swagger_auto_schema(method='post', request_body=login_schema, responses = login_schema_response)
def myAccount(request):
     pass
Run Code Online (Sandbox Code Playgroud)

在这里,我将请求和响应架构对象存储在不同的变量中。


小智 3

尝试以下代码:

@swagger_auto_schema(responses={
    status.HTTP_200_OK: Schema(
        type=TYPE_OBJECT,
        properties={
           'students': Schema(
              type=TYPE_ARRAY
           )
        }
    )
})
Run Code Online (Sandbox Code Playgroud)