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

Django REST Framework模拟POST请求时r.data为空如何解决?

Django REST Framework模拟POST请求时r.data为空的解决方法

你遇到的问题核心是APIRequestFactory的post方法传参方式错误——当指定format="json"时,不能直接用data参数传递JSON结构数据,需要改用json参数。

修正后的代码如下:

factory = APIRequestFactory()
data = {"hello": 1}
print(data)

# 改用json参数传递数据,而非data参数
django_request = factory.post(url, json=data, format="json")
print("body:", django_request.body)
print("ct:", django_request.content_type)
r = Request(django_request)
print(r.data)  # 此时会输出{'hello': 1}

原因说明

APIRequestFactory的post方法逻辑:

  • 若使用data参数,即使指定format="json",它仍会把数据当作表单数据处理,导致请求体格式和Content-Type不匹配,DRF的Request无法正确解析。
  • 改用json参数后,Factory会自动将数据序列化为JSON字符串,设置正确的application/json Content-Type,DRF的Request就能正常解析出r.data。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:30:54