You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在drf-yasg Swagger文档中添加带自定义参数的序列化器响应示例?

错误原因

你遇到的报错是因为在examples配置中直接传入了UserSerializer类对象,drf-yasg无法将序列化器类直接转换为JSON格式的示例内容。

解决方案

有两种常用的实现方式,优先推荐第一种,可维护性更高:

方案1:自定义响应序列化器(推荐)

先定义专门的登录接口响应序列化器,直接传给openapi.Response的schema参数即可,drf-yasg会自动根据序列化器生成文档和示例:

from rest_framework import serializers, status
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema

from authprofile.serializers import UserSerializer

# 自定义登录接口响应序列化器
class LoginResponseSerializer(serializers.Serializer):
    user = UserSerializer(help_text="用户信息")
    token = serializers.CharField(help_text="用户认证令牌")

login_response_schema = {
    # 登录接口通常返回200状态码,你也可以保留原来的201_CREATED按需调整
    status.HTTP_200_OK: openapi.Response(
        description="登录成功",
        schema=LoginResponseSerializer
    )
}

class LoginAPI(generics.GenericAPIView):
    serializer_class = LoginSerializer

    @swagger_auto_schema(
        operation_description="使用邮箱和密码登录",
        responses=login_response_schema
    )
    def post(self, request):
        # 原有业务逻辑不变
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data
        _, token = AuthToken.objects.create(user)
        return Response({
            "user": UserSerializer(user, context=self.get_serializer_context()).data,
            "token": token
        })

方案2:手动写静态示例

如果你只需要自定义显示的示例内容,不需要自动同步序列化器变更,可以直接把examples里的UserSerializer替换为实际的示例结构:

login_response_schema = {
    status.HTTP_200_OK: openapi.Response(
        description="登录成功",
        examples= {
            "application/json":{
                "user": {
                    "id": 1,
                    "email": "test@example.com",
                    "username": "测试用户"
                    # 按照你实际UserSerializer的字段补充示例即可
                },
                "token": "2c36a42f9d0e18b7c5a3f1e7d9c2b4a6f8e0d3c5",
            }
        }
    )
}

两种方案都可以解决报错问题,同时让token和用户信息的字段正常显示在Swagger文档中。

内容的提问来源于stack exchange,提问作者Surya Bhusal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:15:03