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

DRF+Vue项目中新增ClientAccount接口400错误求助

排查方案

1. 优先解决后端request.data为空的核心问题

后端接收不到数据本质是请求格式不符合Django REST Framework(DRF)的解析要求,重点检查前端请求的Content-Type:

  • 打开浏览器开发者工具(F12)→ Network标签,找到clientaccount/的POST请求,查看Request Headers里的Content-Type是否为application/json;charset=utf-8。
  • 若为application/x-www-form-urlencoded或其他格式,DRF默认不会将请求体解析为JSON,直接导致request.data为空。

修正方法:如果getAPI是封装的axios实例,可显式指定请求头;若为手动处理数据,需确保用JSON.stringify()序列化并配置Header:

getAPI.post('http://localhost:8000/api/clientaccount/', this.addNewClientAccount, {
  headers: {
    'Content-Type': 'application/json'
  }
})

2. 核对前端变量名拼写

注意代码中变量名的大小写差异:

console.log(this.addNewclientAccount) // 小写c
getAPI.post(..., this.addNewClientAccount) // 大写C

虽然控制台输出了正确的Proxy对象,但需确认this.addNewClientAccount(大写C)确实指向你要提交的对象,避免因定义时的拼写错误导致传值为空。

3. 修正Serializer的代码错误

你的ClientAccountsSerializer存在语法错误:create方法写在了Meta类内部,这会导致Serializer无法正确识别自定义的创建逻辑,甚至引发验证异常。正确写法如下:

class ClientAccountsSerializer(serializers.ModelSerializer):
    class Meta:
        model = ClientAccounts
        fields = ('id', 'client_fk', 'client_platform', 'client_key', 'client_value' )
        
        extra_kwargs = {
            'id': {'read_only': True},
        }
         
    # 将create方法移至Meta类同级
    def create(self, validated_data):
        logger.info("ClientAccountsSerializer.create validated_data = %s ", validated_data)
        return ClientAccounts.objects.create(**validated_data)

4. 排查外键字段的有效性(数据接收后的验证问题)

当后端能正常接收数据后,需确认client_fk:28对应的Client记录确实存在于数据库中。若该ID的Client不存在,序列化器会验证失败并返回400错误。

可在后端View中临时打印具体错误信息,定位问题:

def post(self, request):
    print("ClientAccounts post request.data = %s ", request.data)
    serializer = ClientAccountsSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_200_OK)
    # 新增:打印序列化器错误详情
    print("Serializer errors: ", serializer.errors)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

5. 确认DRF的解析器配置

确保项目settings.py中启用了JSON解析器:

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
    ],
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:58:11