【问题标题】:why swagger-UI doesn't show prameters and response?为什么 swagger-UI 不显示参数和响应?
【发布时间】:2021-12-28 09:14:57
【问题描述】:

我正在使用 django、djangorestframwork 和 drf-yasg。 我在 view.py 模块中有这个 api:

@api_view(http_method_names=["GET"])
def get_all__referralCodes_game(request):

    data = request.query_params
    query = GameCollection.find_one(
        {"_id": ObjectId(data["gameId"]),},
        {"_id": 0,f"referralCodes": 1,}
    )
    if query:
        return Response(data={"msg": "ok", "data": [query["referralCodes"]]}, status=http.HTTPStatus.OK)
    return Response(data={"msg": "not_found", "data": {}}, status=http.HTTPStatus.NOT_FOUND)

url.py 模块中我有:

urlpatterns = [
    path("referral-code/get-all", views.get_all__referralCodes_game),
]

我需要在查询参数中有gameId,但在那里看不到。

【问题讨论】:

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


    【解决方案1】:

    drf-yasg 不知道您的 gameId 查询参数。你需要以某种方式告诉它参数。

    根据drf-yasg documentation

    query Parameters - 即在 URL 中指定为 /path/?query1=value&query2=value 的参数 - 从视图的 filter_backendspaginator 生成,如果有声明的话。可以通过@swagger_auto_schemaquery_serializermanual_parameters 参数指定其他参数。

    你可以像这样使用@swagger_auto_schema

    @swagger_auto_schema(
            method='get',
            manual_parameters=[
                openapi.Parameter(
                    'gameId',
                    openapi.IN_QUERY,
                    description='Game ID',
                    required=True,
                    type=openapi.TYPE_INTEGER,
                ),
             ]
    )
    def get_all__referralCodes_game(request):
    
    

    对于响应,您可以定义一个序列化程序(推荐)并将其设置为类的serializer_class,或者您可以将responses 值添加到@swagger_auto_schema 装饰器(有关示例,请参阅文档)。

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-24
      • 2020-06-10
      • 2020-12-22
      • 1970-01-01
      相关资源
      最近更新 更多