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

Django中request.POST为空,如何正确传递POST请求参数?

解决Django POST请求无法获取JSON参数的问题

问题原因

你用测试客户端发送请求时指定了format='json',这会把数据以JSON格式放在请求体里,但Django的request.POST只能解析application/x-www-form-urlencoded(表单编码)或multipart/form-data类型的请求,JSON数据不会被放到request.POST中,所以你看到的是<QueryDict: {}>。

解决方案

方案1:发送表单编码数据(无需修改后端)

直接去掉format='json'参数,测试客户端默认会发送表单编码的数据,这样request.POST就能正常获取参数:

response = client.post("/foo/bar/api/v1/error/1", {"short_description": "hello", "long_description": "world"})

也可以显式指定内容类型,效果一致:

response = client.post(
    "/foo/bar/api/v1/error/1",
    {"short_description": "hello", "long_description": "world"},
    content_type='application/x-www-form-urlencoded'
)

方案2:后端解析JSON数据(适合需要接收JSON的场景)

如果接口需要支持JSON格式请求,后端要手动解析请求体里的JSON数据:

import json

def post(request, *args, **kwargs):
    # 判断请求是否为JSON类型
    if request.content_type == 'application/json':
        # 解析JSON数据
        data = json.loads(request.body)
        short_description = data.get("short_description", "")
        long_description = data.get("long_description", "")
    else:
        # 兼容表单编码的情况
        short_description = request.POST.get("short_description", "")
        long_description = request.POST.get("long_description", "")
    
    # rest of the code goes here

方案3:用Django REST Framework简化处理

如果项目使用了DRF,直接用request.data即可,它会自动处理JSON、表单等多种格式的请求:

from rest_framework.views import APIView

class YourErrorView(APIView):
    def post(self, request, *args, **kwargs):
        short_description = request.data.get("short_description", "")
        long_description = request.data.get("long_description", "")
        # rest of the code goes here

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:07:40