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

使用Django REST Framework POST数据时返回HTTP 400 Bad Request错误如何解决

Django REST Framework POST 400错误排查解决步骤
  • 第一步:修复视图错误返回逻辑,获取具体报错信息
    你当前的视图代码在序列化器验证失败时,返回的是序列化器的data而非错误详情,无法定位问题。修改视图代码如下:
@api_view(['POST'])
def insert_member(request):
    if request.method == "POST":
        member_serializer = MemberSerializer(data=request.data)
        if member_serializer.is_valid():
            member_serializer.save()
            return Response(member_serializer.data,status=201)
        # 验证失败返回错误信息,而非空data
        return Response(member_serializer.errors,status=400)

修改后重新发起请求,即可在响应体中看到具体是哪个字段验证失败,针对性解决。

  • 第二步:检查日期格式兼容性
    Django REST Framework默认的日期输入格式为YYYY-MM-DD,你提交的日期为DD-MM-YYYY格式,大概率会触发验证失败。如果需要支持该格式,修改序列化器,指定日期字段的输入格式:
from rest_framework import serializers
from .models import Member
    
class MemberSerializer(serializers.ModelSerializer):
    # 自定义日期字段的输入输出格式
    start_date = serializers.DateField(format="%d-%m-%Y", input_formats=["%d-%m-%Y", "%Y-%m-%d"])
    end_date = serializers.DateField(format="%d-%m-%Y", input_formats=["%d-%m-%Y", "%Y-%m-%d"])
    class Meta:
        model = Member
        fields = '__all__'
        # 可选:设置id为只读,不需要前端提交
        read_only_fields = ['id']
  • 第三步:检查主键提交逻辑
    如果你的Member模型的id字段是自增主键,前端提交POST请求时不需要携带id参数,数据库会自动生成,多余的id参数如果存在重复或者不符合字段约束也会触发验证错误,可以直接删掉请求体中的id字段。

  • 第四步:检查模型字段约束
    核对Member模型的字段定义:

  1. 是否存在必填字段未在请求体中提交,且模型未设置默认值、不允许为空
  2. email字段是否设置了unique=True,当前提交的邮箱是否已经存在于数据库中
  3. 字段长度限制是否符合,比如first_name的max_length是否小于你提交的内容长度
  • 第五步:检查请求头配置
    使用jQuery发送JSON格式的POST请求时,需要显式设置Content-Type为application/json,同时将请求数据转为JSON字符串,示例代码:
$.ajax({
    url: 'http://127.0.0.1:8000/newmember/',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({
        "first_name": "paul",
        "last_name": "scholes",
        "discipline": "football",
        "start_date": "01-01-2000",
        "end_date": "01-01-2012",
        "email": "paulscholes@gmail.com"
    }),
    success: function(res) {
        console.log(res)
    },
    error: function(err) {
        console.log(err.responseJSON)
    }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:54:01