当前位置: 首页 > 知识库问答 >
问题:

使用 drf-spectacular 和 x-www-form-urlencoded 请求的 Swagger UI 示例

须敏学
2023-03-14

是否可以生成一个包含application/json和x-www-form-urlencoded请求体示例的招摇过市UI页面(以及redoc)?我可以得到application/json的示例,但在swagger/redoc UI中选择x-www-form-urlencoded作为请求类型时却没有。

我将以下装饰器用于“create”方法(在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请求体提供一个带有“示例输入”的示例下拉框(选择示例将填充json),但对于x-www-form-urlencoded,将只显示一个要填写的表单,没有示例下拉框来填充字段。

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

@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,这似乎没有生成?

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

共有1个答案

籍昱
2023-03-14

对于示例数据,Redoc非常手工,因为很少基于模式自动生成示例。

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

如果您想要< code > 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'
        )
 类似资料:
  • 在java中,如何使用。我不明白如何发送带有键值的正文,如上面的屏幕截图所示。 我尝试过以下代码: 但是在回复中,我没有收到正确的数据。

  • 问题内容: 我有一些要以表单编码形式发布到服务器的参数: 我正在这样发送我的请求(当前没有参数) 如何在请求中包含表单编码的参数? 问题答案: 对于上载表单编码的POST请求,我建议使用FormData对象。 示例代码:

  • 这是我第一次决定用完整的Java代码配置编写基于Spring Boot和Spring Security性的应用程序,我遇到了无法超越的奇怪问题。我正在尝试用Postman测试API,我的请求只有在使用内容类型为application/x-www-form-urlencoded时才被接受。下面我粘贴我的所有当前配置。 如果我想登录,我只能使用提到的内容类型。对于应用程序/json,我得到403响应状

  • 我有一个SOAP客户端发送一个请求,它的内容类型定义为应用程序/x-wow-form-urlencoded。我的jax-ws服务器响应HTTP 415错误,抱怨它需要文本/xml的内容类型。 显然,无法更改此客户端,因此我正在尝试找出是否有任何方法可以强制我的服务器接受此内容类型?

  • 我有一个api要求在标题中发送以下参数- 内容类型-应用程序/x-www. form-urlencoded AuthKey-(会话令牌) 以及正文中的以下参数(表单日,即键值对) storeId-1 类型-产品 类别ID-324 但是每当我点击这个api,我总是得到401(未授权)错误。我已经尝试使用MultipartRequest正文和formBody,我知道这与正文无关(它的头,我需要发送内容

  • 问题内容: 之间有什么区别 request.ContentType =“ application / json; charset = utf-8”; 和 webRequest.ContentType =“ application / x-www-form-urlencoded”; 问题答案: 第一种情况是告诉Web服务器您正在发布JSON数据,如下所示: 第二个选项是告诉Web服务器您将对URL中