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

Django HttpRequest对象无法获取JSON参数问题排查

问题分析与解决方法

问题根源

使用requests.get()时,即便传入json参数,HTTP规范里GET请求不会携带请求体(request body),所以Django端的request.body为空,自然解析不到目标JSON数据。

解决方法

方法一:改用POST请求(推荐)

POST请求支持携带请求体,适合传递JSON数据:

客户端代码修改

import requests

endpoint = 'http://127.0.0.1:8000/api'

# 将get请求改为post请求
get_response = requests.post(endpoint, params={"abc":345}, json={"query":"hi, this is what you are looking for!"} )

print(get_response.json())

Django视图代码优化(可选,更简洁)

Django 3.1+内置了JSON请求体解析方法,无需手动调用json.loads:

from django.http import JsonResponse
from django.http import HttpRequest

def api_home(request: HttpRequest, *args, **kwargs): 
    data = {}
    if request.content_type == 'application/json' and request.body:
        data = request.json()  # 自动解析请求体中的JSON
    
    print(data)
    return JsonResponse({'message': 'hi there, this is your Django API response'})

方法二:必须用GET请求时,将JSON放入查询参数

如果业务要求必须使用GET请求,可以把JSON序列化为字符串后作为查询参数传递:

客户端代码

import requests
import json

endpoint = 'http://127.0.0.1:8000/api'

# 把JSON序列化为字符串,作为查询参数的一部分
params = {
    "abc": 345,
    "query_json": json.dumps({"query":"hi, this is what you are looking for!"})
}
get_response = requests.get(endpoint, params=params)

print(get_response.json())

Django视图代码

from django.http import JsonResponse
import json

def api_home(request, *args, **kwargs): 
    data = {}
    query_json = request.GET.get('query_json')
    if query_json:
        try:
            data = json.loads(query_json)
        except:
            pass
    
    print(data)
    return JsonResponse({'message': 'hi there, this is your Django API response'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:55:21