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

前端发JSON格式POST请求,Django中request.POST参数为空如何解决?

问题原因及解决方案

你遇到的问题是因为前端发送的是JSON格式的请求体,而Django的request.POST仅用于解析application/x-www-form-urlencoded或multipart/form-data类型的表单数据,不会自动解析JSON格式的请求内容。

解决方法有两种:

方法1:使用Django REST Framework的request.data(推荐)

因为你已经用了DRF的@api_view装饰器,DRF会自动解析JSON、表单等多种格式的请求体,直接通过request.data获取数据即可:

from rest_framework.decorators import api_view

@api_view(['POST'])
def run_ngen(request):
    # DRF自动解析JSON请求体,直接从request.data取数据
    cmd = request.data.get('cmd')
    print("cmd参数:", cmd)
    # 也可以打印所有参数
    print("所有参数:", request.data)

方法2:手动解析request.body

如果不想依赖DRF的自动解析,也可以手动读取并解析请求体的JSON内容:

from rest_framework.decorators import api_view
import json
from django.http import JsonResponse

@api_view(['POST'])
def run_ngen(request):
    try:
        # 读取request.body并解析为JSON对象
        payload = json.loads(request.body)
        print("params", payload.keys())
        print("cmd参数:", payload.get('cmd'))
    except json.JSONDecodeError:
        # 处理JSON解析失败的异常
        return JsonResponse({"error": "无效的JSON格式"}, status=400)

额外注意事项

如果是同域请求,要确保前端正确携带Django的CSRF Token,否则可能触发403权限错误。可以在前端请求中添加CSRF头:

// 获取页面中的CSRF Token
const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;

fetch('/runNgen/',
    {
        method: "POST",
        body: JSON.stringify(payload),
        headers: {
            "Content-Type": "application/json",
            "X-CSRFToken": csrftoken
        }
    })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:02:41