首页 > 解决方案 > 如何在 drf-aysg swagger web UI 中显示棉花糖 sheme 作为 request_body 的示例

问题描述

我正在做的项目:

1) 与 20 多个外部数据源一起工作,只会有更多(rest api、xmlrpc、boto 和 boto3、xml 等)在主要使用棉花糖方案

2) 计划了 100 多个 API 方法(使用django-rest-marshmallow

3) 整个 API 描述通过库drf-aysg使用openapi.Schema 维护

我想让项目中的所有序列化/反序列化操作都相同。为此,我想使用棉花糖

openapi Schema 描述输入 API 数据

PackageCreateDomainSchema = openapi.Schema(
    title="Mass Domain Creation",
    type=openapi.TYPE_OBJECT,
    required=["domains"],
    properties={
        'domains': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Items(type=openapi.TYPE_STRING)),
    },
)

API 描述装饰器

@swagger_auto_schema(
    request_body=PackageCreateDomainSchema,
    operation_summary="Package Domain adding",
    tags= ['Tag1', "Tag2"],
    responses= {
         201: openapi.Response('Domain added', CreateDomainSchema , examples=[{"created": 5, "exists": ['example.com'] }])
    }
)

我想使用此代码而不是第一个块

from rest_marshmallow import Schema, fields

class PackageCreateDomainSchema(Schema):
    domains = fields.List(fields.String(), required=True)

但是 Swagger Web UI 仅将最后一个类定义显示为字符串而不是带有字符串列表的 dict

如何使库drf-yasg将Marchmallow渲染为复杂对象(不作为默认值 - 字符串)

标签: django-rest-frameworkmarshmallowdrf-yasg

解决方案


推荐阅读