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

调用Stack Overflow API时遇WSGIRequest无get属性错误求助

问题原因与修复方案

嘿,我一眼就看穿问题出在哪了!你的错误根源是命名冲突,再加上一点小的代码健壮性问题,我来一步步帮你解决:

核心问题拆解

  1. 视图参数与requests库重名:你把视图函数的参数命名为requests,这直接覆盖了你导入的requests HTTP请求库。所以函数里的requests.GET["query"],其实是在调用Django的WSGIRequest对象的属性,而不是你用来调用Stack Overflow API的那个库——这就是报错'WSGIRequest' object has no attribute 'Get'的根本原因。
  2. 参数获取不够健壮:直接用["query"]索引GET参数,如果请求里没带这个参数,会直接抛出KeyError导致崩溃。

修复后的完整代码

视图层(Views)

import requests
from django.http import JsonResponse

def search(request):  # 把参数名改成request,避免和requests库冲突
    # 用.get()方法获取参数,query不存在时返回空字符串,避免崩溃
    query = request.GET.get("query", "")
    if not query:
        return JsonResponse({"message": "请提供查询参数query"}, status=400)
    
    # 用params参数传递查询条件,自动处理URL编码,更安全
    api_params = {
        "order": "desc",
        "sort": "activity",
        "q": query,
        "site": "stackoverflow"
    }
    # 现在这里的requests才是你导入的HTTP请求库
    response = requests.get(
        'https://api.stackexchange.com/2.2/search/advanced',
        params=api_params
    )
    api_data = response.json()
    return JsonResponse({"message": api_data})

URL配置(URLs)

你的URL配置完全没问题,保持原样即可:

urlpatterns = [
    path('search/', views.search, name='search'),
]

为什么这样改?

  • 解决命名冲突:把视图参数改成request(Django的标准命名),这样函数内部的requests就会正确指向你导入的HTTP请求库,不会再和Django的请求对象混淆。
  • 提升代码健壮性:用request.GET.get()代替直接索引,当请求里没有query参数时,会返回默认的空字符串,还能提前判断并返回友好提示。
  • 更安全的URL拼接:用params参数传递查询条件,requests库会自动处理特殊字符的URL编码(比如空格、&等),避免因为参数格式问题导致API请求失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:21:05