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

Django视图处理axios多参数POST请求获取参数为None如何解决?

问题根因

你通过axios发送的是application/json格式的POST请求,Django的request.POST对象仅支持解析表单格式(application/x-www-form-urlencoded/multipart/form-data)的请求数据,不会自动解析JSON payload,因此直接取值返回None。

解决方案

提供两种适配方案,可根据场景选择:

方案1:后端适配JSON请求(前后端分离场景推荐)

修改views.py逻辑,手动解析请求体中的JSON数据:

import json
from django.http import JsonResponse

def render_data(request):
    if request.method == 'POST' and request.content_type == 'application/json':
        # 解析JSON格式请求体
        req_data = json.loads(request.body)
        reddit_url = req_data.get('reddit_url')
        sort = req_data.get('sort')
    else:
        # 可保留原逻辑兼容表单格式请求
        reddit_url = request.POST.get('reddit_url')
        sort = request.POST.get('sort')
    print(reddit_url, sort)
    users_data, count = run_data(reddit_url, sort)
    data = {
        'users_data': users_data,
        'count': count,
    }
    return JsonResponse(data)

如果后续接口数量较多,可引入Django REST Framework,直接使用request.data即可自动适配多种请求格式,无需手动解析。

方案2:前端改为发送表单格式请求

无需修改后端现有逻辑,调整前端axios请求参数格式即可:

方式A:使用FormData构造参数

const APIcall = () => {
    // 构造表单数据对象
    const formData = new FormData();
    formData.append('reddit_url', location.state.link);
    formData.append('sort', location.state.sort);

    axios
      .post(
        `http://127.0.0.1:8000/reddit_data/`,
        formData,
        {
          headers: {
            "X-CSRFToken": location.state.token,
          },
          withCredentials: true,
        }
      )
      .then((res) => {
        console.log("YESSIR");
        setLoading(false);
      });
  };

方式B:使用qs库序列化参数

首先安装依赖:npm install qs

import qs from 'qs';

const APIcall = () => {
    axios
      .post(
        `http://127.0.0.1:8000/reddit_data/`,
        qs.stringify({
          reddit_url: location.state.link,
          sort: location.state.sort,
        }),
        {
          headers: {
            "Content-Type": "application/x-www-form-urlencoded",
            "X-CSRFToken": location.state.token,
          },
          withCredentials: true,
        }
      )
      .then((res) => {
        console.log("YESSIR");
        setLoading(false);
      });
  };
验证排查方法

修改代码前可在Django视图中打印request.body查看原始请求数据,确认参数已正常传递,再对应调整解析逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:00:00