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

为什么Django的request.POST.get无法获取原生JS发送的POST参数?

差异的核心原因

这个差异本质是请求的Content-Type类型不同,导致Django的参数解析逻辑不同,具体原因拆解如下:

1. Django request.POST 的解析规则

Django的request.POST对象只会自动解析满足以下两个条件的POST请求:

  • 请求头的Content-Type值为application/x-www-form-urlencoded 或 multipart/form-data
  • 请求体内容是符合对应格式的键值对数据
    如果请求是application/json类型的JSON字符串,Django不会将其解析到request.POST中,需要开发者手动从request.body中读取原始内容,再通过json.load()反序列化得到参数。

2. 原生JS请求的特征

你手动设置了Content-Type: application/json,且请求体是经过JSON.stringify()序列化的JSON字符串,完全匹配application/json类型的请求特征,所以Django不会把参数解析到request.POST,只能手动解析request.body获取。

3. jQuery $.ajax 请求的默认特征

jQuery的$.ajax方法默认配置下:

  • 默认contentType 为 application/x-www-form-urlencoded; charset=UTF-8
  • 当你传入普通JS对象作为data参数时,jQuery会自动将对象序列化为key=value&key2=value2格式的表单字符串
    这种请求完全符合Djangorequest.POST的解析条件,所以可以直接用request.POST.get()获取参数。

补充验证:如果给jQuery的$.ajax手动设置contentType: 'application/json',同时将data参数用JSON.stringify()转为JSON字符串,此时request.POST.get()同样会返回None,和原生JS的表现完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:36:04