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

Django接口接收POST请求总是重定向到登录页返回BAD_REQUEST错误

问题原因

  1. 前端fetch请求默认不会携带Cookie凭证,你登录后存储在浏览器的sessionid没有随POST请求提交到服务端,Django识别不到当前登录用户,触发NoteCreateView继承的LoginRequiredMixin校验规则,自动重定向到登录页,拼接next参数指向你请求的接口地址。
  2. 接口原有代码存在逻辑错误:序列化器校验失败时返回serializer.data而非错误信息,是后续返回BAD_REQUEST的诱因。

解决方法

  • 首先修改前端fetch请求配置,添加credentials: 'include'参数,强制请求携带Cookie:
e.preventDefault()
const note = document.getElementById('add-note').value
let date = new Date()
const data = {
  'note':note,
  'date_created':date
}
let url = 'http://localhost:8000/api/notes/create/'
fetch(url, {
  method:'POST',
  credentials: 'include', // 新增此行
  headers:{
    'content-type':'application/json',
    'X-CSRFToken':csrftoken
  },
  body:JSON.stringify(data)
})
.then(res => {
  getAllNotes()
  document.getElementById('form').reset()
})
})
  • 修正后端接口错误返回逻辑,校验失败时返回序列化器的错误信息:
class NoteCreateView(LoginRequiredMixin, APIView):
  def post(self, *args, **kwargs):
    print(self.request.user)
    data = (self.request.data)
    data['id'] = self.request.user.id
    print(data)
    serializer = NoteSerializer(data=data)
    if serializer.is_valid():
      serializer.save()
      return Response(serializer.data, status=HTTP_201_CREATED)
    # 修改下行的返回内容
    return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
  • 本地跨域测试如果仍有问题,可在settings.py中添加如下配置:
CSRF_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SAMESITE = 'Lax'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:45:00