0

是否可以生成一个包含 application/jsonx-www-form-urlencoded 请求主体的示例的招摇的 UI 页面(以及重做)?我可以获取 application/json 的示例,但在选择 x-www-form-urlencoded 作为 swagger/redoc UI 的请求类型时不能。

我将以下装饰器用于“创建”方法(在 ModelViewSet 中)

@extend_schema(request=MySerializer)

其中 MySerializer 如下所示...

@extend_schema_serializer(
    examples=[
        OpenApiExample(
            'Example input',
            description='Creation of an alias',
            value={
                'user_id': 1234567890,
                'obj_id': 288,
                'alias': 'my alias'
            },
            request_only=True,
            response_only=False,
        ),
    ],
)
class MySerializer(serializers.Serializer):
    user_id = serializers.IntegerField()
    obj_id = serializers.IntegerField()
    alias = serializers.CharField(max_length=50)

swagger/redocs UI 很乐意为应用程序/json 请求正文提供一个带有“示例输入”的示例 dropbox(选择示例将填充 json),但对于 x-www-form-urlencoded 将只显示一个要填写的表单在,没有示例 Dropbox 以填充字段。

我可以获得查询字符串的示例(及其选择下拉框),即在制作使用 OpenApiParameter 的 GET 端点时,例如

@extend_schema(
        parameters=[
            OpenApiParameter(name='q', description='Query string to search for', required=True, type=str,
                examples=[
                    OpenApiExample(
                        'Search query',
                        value='foobar'
                    ),
                ]
            ),
            ...
        ]
    )

选择一个下拉框条目将填充文本字段。

但是,对于 x-www-form-urlencoded,这似乎没有生成?

这可能吗?难道我做错了什么?

4

1 回答 1

0

当涉及到示例数据时,Redoc 是非常手动的,因为几乎没有基于模式自动生成示例。

AFAIK SwaggerUI 确实从模式生成了一个基本示例,但也仅适用于 JSON。

如果您想要application/x-www-form-urlencoded示例,您可能需要手动指定每个示例。不确定果汁是否值得在那里挤压。

现在到 drf-spectacular:OpenApiExample默认情况下是 JSON,所以如果您想要不同的编码,您需要显式设置它并提供正确编码的值字符串:

        OpenApiExample(
            'Form-encoded example 1',
            value='YOUR HANDMADE FROM ENCODED DATA STRING',
            media_type='application/x-www-form-urlencoded'
        )
于 2022-02-01T18:23:59.020 回答