【问题标题】:drf_yasg documentation parameters not showingdrf_yasg 文档参数未显示
【发布时间】:2020-10-05 05:32:01
【问题描述】:

我正在使用 drf_yasg 对我的 API 进行自我记录,该 API 是使用 django 框架构建的,但是对于任何端点都没有显示任何参数。我这样做的方式是以 JSON 格式在 http 请求正文中传递参数。然后我从 request.data 中读取参数。下面是其中一个视图的示例,其中将“id”作为请求正文中的参数。

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def get_availability_by_schoolid(request):
    if request.user.is_donor:
        try:
            #Get the existing slots and remove them to replace with new slots
            slots = SchoolSlot.objects.filter(school__id=request.data["id"]).values('day','am','pm')
            availability = process_availability(slots)
            availabilityslotserializer = SchoolSlotSerializer(availability)
            return Response(availabilityslotserializer.data, status=status.HTTP_200_OK)
        except Exception as e:
            print(e)
            return Response(ResponseSerializer(GeneralResponse(False,"Unable to locate school")).data, status=status.HTTP_400_BAD_REQUEST)
    else:
        return Response(ResponseSerializer(GeneralResponse(False,"Not registered as a donor")).data, status=status.HTTP_400_BAD_REQUEST)

这将在 swagger 文档中显示如下:

我一直在查看文档,它表明我可能需要添加一个带有手动参数的装饰器,但我无法弄清楚我该怎么做,因为我能找到的示例是获取查询参数或路径参数。我在下面添加了装饰器,它可以响应文档。

@swagger_auto_schema(method='post', responses={200: SchoolSlotSerializer,400: 'Bad Request'})

请求正文的一个例子是:

  { "id": 43 }

更新:

我似乎得到了以下装饰器的一些东西:

@swagger_auto_schema(method='post', request_body=openapi.Schema(
    type=openapi.TYPE_OBJECT,
    properties={
        'id': openapi.Schema(type=openapi.TYPE_INTEGER, description='Donor ID')
    }),
    responses={200: SchoolSlotSerializer,400: 'Bad Request'})

这记录了参数。现在我有另一个端点是它需要以下 JSON 作为输入,我将如何添加它?

  {
        "availability": {
            "mon": {
                "AM": true,
                "PM": false
            },
            "tue": {
                "AM": false,
                "PM": false
            },
            "wed": {
                "AM": false,
                "PM": false
            },
            "thu": {
                "AM": true,
                "PM": true
            },
            "fri": {
                "AM": false,
                "PM": false
            },
            "sat": {
                "AM": false,
                "PM": false
            },
            "sun": {
                "AM": true,
                "PM": false
            }
    }
    }

【问题讨论】:

    标签: django-rest-framework swagger drf-yasg


    【解决方案1】:

    您可以为此使用 ModelSerializer:

    @swagger_auto_schema(method='post', request_body=ModelSerializer)
    
    

    【讨论】:

      【解决方案2】:

      我相信这就是它能够工作的原因:

      如果有更好的方法请告诉我。

      @swagger_auto_schema(method='post', request_body=openapi.Schema(
          type=openapi.TYPE_OBJECT,
          properties={
              'id': openapi.Schema(type=openapi.TYPE_INTEGER, description='Donor ID')
          }),
          responses={200: SchoolSlotSerializer,400: 'Bad Request'})
      

      【讨论】:

        猜你喜欢
        • 2023-02-15
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 2017-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多