PC向Django应用发送GET请求获取参数返回None如何解决
问题根因
- 使用
requests.get()发送GET请求时错误使用了data参数传递查询参数:GET请求的参数需要放在URL的查询字符串中,requests中对应传递参数的字段为params,data字段仅用于POST/PUT等携带请求体的请求,不会被解析到GET查询参数中,因此Django侧无法读取到test参数,返回None。 - 请求URL缺少
http://协议头,requests无法正确识别请求地址,会导致请求异常。 - 额外说明:Django视图的入参是请求对象,命名为
response易引发歧义,建议改为request,不过该问题不影响代码运行。
修正后的代码
1. 客户端请求脚本
import requests payload = {'test': 1} # 替换data为params,URL添加http协议头 r = requests.get("http://127.0.0.1:8000", params=payload) print(r.text)
2. Django视图优化(可选,增强健壮性)
from django.http import HttpResponse # 入参重命名为request更符合惯例 def SomeView(request): if request.method == 'GET': # 增加默认值,避免未传test参数时返回None引发异常 data = request.GET.get("test", "未传递test参数") return HttpResponse(data)
验证效果
修改后启动Django服务,再运行请求脚本,即可正常输出1符合预期。
内容的提问来源于stack exchange,提问作者Jackhammer
相关产品推荐
相关产品推荐

