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
相关产品推荐
相关产品推荐

