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

React+DRF架构下Axios POST请求Payload无法被Django处理的问题

解决React + DRF POST请求字段缺失的问题

问题核心原因

你的DRF视图中错误地从URL查询参数(request.query_params)获取POST请求的数据,但React通过Axios发送的JSON格式POST请求,参数是放在**请求体(request body)**里的,这就导致序列化器无法读取到email和password字段,触发必填项错误。

另外你提到Postman用URL编码Payload能成功,是因为URL编码的参数会被DRF解析到query_params中,刚好匹配了你错误的代码逻辑,但这并非POST请求的标准传参方式。

修复方案

修改RegistrationViewSet的create方法,将序列化器的数据源从request.query_params改为request.data:

class RegistrationViewSet(viewsets.ModelViewSet, TokenObtainPairView):
    serializer_class = RegistrationSerializer
    permission_classes = (AllowAny,)
    http_method_names = ['post']

    def create(self, request, *args, **kwargs):
        # 替换 query_params 为 request.data
        serializer = self.get_serializer(data=self.request.data)

        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        refresh = RefreshToken.for_user(user)
        res = {
                "refresh": str(refresh),
                "access": str(refresh.access_token),
                }
        return Response({
            "user": serializer.data,
            "refresh": res["refresh"],
            "token": res["access"]
            }, status=status.HTTP_201_CREATED)

额外验证点

  • 确认React端的registrationInfo确实包含email和password字段,可在Axios请求前用console.log(registrationInfo)检查内容。
  • 前端已正确设置Content-Type: application/json请求头,DRF会自动将请求体中的JSON数据解析到request.data中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:35:20