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

如何自定义Python Djoser包创建用户时的返回响应格式

自定义Djoser注册成功后的返回格式

要实现你想要的嵌套返回结构,有两种实用方案,优先推荐第一种(仅针对注册接口生效,不会影响其他接口):

方案一:重写RegisterView视图

Djoser的注册逻辑由RegisterView处理,我们可以继承它并修改响应输出:

  1. 在你的项目视图文件(比如views.py)中创建自定义视图:
from djoser.views import RegisterView
from rest_framework.response import Response

class CustomRegisterView(RegisterView):
    def create(self, request, *args, **kwargs):
        # 先调用父类的create方法拿到默认响应
        original_response = super().create(request, *args, **kwargs)
        # 包装成你想要的格式
        custom_response_data = {
            "data": original_response.data,
            "success": True
        }
        # 返回新的响应,保持原状态码
        return Response(custom_response_data, status=original_response.status_code)
  1. 替换Djoser默认的注册路由
    在urls.py里覆盖默认的注册路由,指向我们的自定义视图:
from django.urls import path, include
from .views import CustomRegisterView

urlpatterns = [
    # 保留Djoser的其他路由
    path('auth/', include('djoser.urls')),
    # 覆盖注册接口路由
    path('auth/users/', CustomRegisterView.as_view(), name='custom_user_register'),
]

这样修改后,注册成功就会返回你期望的格式:

{ "data": { "email": "test14@user.com", "id": 17, "first_name": "reni", "last_name": "brake" }, "success": true }

方案二:重写序列化器的to_representation方法

如果你不想修改视图,也可以在你的RegisterSerializer中重写to_representation方法,但要注意:这个方法会影响所有使用该序列化器的场景(比如用户详情接口),所以谨慎使用:

class RegisterSerializer(UserCreatePasswordRetypeSerializer):
    first_name = serializers.CharField(max_length=100)
    last_name = serializers.CharField(max_length=100)
    
    class Meta(UserCreatePasswordRetypeSerializer.Meta):
        model = get_user_model()
        fields = UserCreatePasswordRetypeSerializer.Meta.fields + ("first_name", "last_name")
    
    def to_representation(self, instance):
        # 获取默认序列化数据
        original_data = super().to_representation(instance)
        # 包装成目标格式
        return {
            "data": original_data,
            "success": True
        }

内容的提问来源于stack exchange,提问作者Onengiye Richard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:02:37