Django中出现AttributeError: 'Response' object has no attribute 'get'错误的求助
Django中出现AttributeError: 'Response' object has no attribute 'get'错误的求助
嗨,我来帮你排查这个问题!这个错误说白了就是你把Django(或者Django REST Framework,简称DRF)的Response对象当成字典来用了——get()是字典专属的方法,Response对象本身可没有这个属性哦,下面我给你拆解常见的出错场景和解决办法:
- 场景1:误操作返回后的Response对象
比如你可能先把字典数据包装成Response,然后又试图直接对这个Response调用get()拿值,代码大概是这样的:
def my_view(request): data = {"username": "SugengGod"} response = Response(data) # 这里出错了!Response对象没有get方法 username = response.get("username") return response
解决办法:如果要操作数据,直接用原始的字典data就行;要是已经生成了Response,DRF的Response可以通过.data属性访问原始数据,Django原生的HttpResponse如果是JSON格式,得先解析内容:
# DRF Response的处理方式 username = response.data.get("username") # Django原生HttpResponse(返回JSON的情况) import json response_data = json.loads(response.content) username = response_data.get("username")
- 场景2:中间件/装饰器里错误处理响应
在中间件的process_response方法或者自定义装饰器里,你可能误把Response当成请求的字典数据来处理,比如想拿响应里的某个字段:
def check_response_decorator(view_func): def wrapper(request): response = view_func(request) # 错误:对Response用get方法 if response.get("code") == 0: print("请求成功") return response return wrapper
解决办法:判断响应状态直接用response.status_code属性;要拿响应内容的话,还是参考上面的.data或者解析.content的方式。
- 场景3:导入了错误的Response类
有时候可能不小心导入了其他库的Response类,而非Django/DRF的,导致对象结构不对。检查你的导入语句:
# DRF项目请用这个导入 from rest_framework.response import Response # Django原生项目用这个 from django.http import HttpResponse
确保你用的是对应框架的响应类,别和其他库的同名类搞混了。
备注:内容来源于stack exchange,提问作者SugengGod
相关产品推荐
相关产品推荐

