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

使用Axios向Django发送POST请求时request.POST为空如何解决?

嘿,我太懂你这种切换工具踩坑的感觉了!刚帮你理清楚问题所在——你这是撞上了Django处理POST数据的格式匹配规则啦!

问题根源

你在Axios里设置了content-type: application/json,所以发送的是JSON格式的请求体,但Django的request.POST只负责解析表单编码(application/x-www-form-urlencoded)或者multipart/form-data类型的数据。JSON格式的数据会直接存在request.body里,自然request.POST就会是空的QueryDict了。

两种实用解决方案

方案1:让Axios发送表单编码数据(适配Django默认的request.POST)

把请求数据改成表单格式,甚至不用手动设置content-type——Axios会自动帮你处理:

const formData = new URLSearchParams();
formData.append('tes1', 'test');
formData.append('tes2', 'test');

axios({
  method: 'post',
  url: SITE_DOMAIN_NAME + '/my_url_name/',
  data: formData,
  headers: {
    "X-CSRFToken": CSRF_TOKEN
    // 这里不用手动加content-type,Axios会自动设为application/x-www-form-urlencoded
  }
}).then(response => {
  // 处理响应
})

这么改完之后,Django的request.POST就能正常拿到tes1和tes2的值了。

方案2:在Django视图里直接解析JSON请求体

如果更想保持前后端JSON交互的模式(这也是React项目里常用的方式),那就在视图里手动解析request.body:

import json
from django.http import JsonResponse

def my_view(request):
    if request.method == 'POST':
        # 解析JSON格式的请求体
        data = json.loads(request.body)
        tes1 = data.get('tes1')
        tes2 = data.get('tes2')
        # 你的业务逻辑处理
        return JsonResponse({'status': 'success', 'data': {'tes1': tes1, 'tes2': tes2}})

要是你用的是Django 3.1及以上版本,还能更省事——直接用request.json属性就能拿到解析好的数据:

data = request.json
tes1 = data.get('tes1')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:24:30