DRF中TokenRefreshView返回Response无法访问data属性的Pylint报错问题
DRF刷新令牌后访问Response.data的静态检查报错解决
问题情况
用DRF的TokenRefreshView刷新令牌,调用视图得到响应后,运行时打印类型确认是rest_framework.response.Response,但Pylint/Pylance报错:
Cannot access attribute "data" for class "HttpResponse" Attribute "data" is unknown
(中文翻译:无法访问类"HttpResponse"的属性"data",属性"data"未知)
报错原因
静态代码检查工具(比如Pylance、Pylint)无法准确推断视图函数的返回类型,把DRF的Response误判成了Django原生的HttpResponse——而原生HttpResponse根本没有data属性,所以触发了错误提示。
解决办法
1. 给变量加类型注解
直接指定refresh_response的类型为DRF的Response,让检查工具明确知道这是什么类型:
from rest_framework.response import Response # 前面的请求创建代码不变 refresh_view = TokenRefreshView.as_view() refresh_response: Response = refresh_view(new_request) refresh_response.data["message"] = "Token refresh successful"
2. 用类型断言确认类型
通过assert语句强制告诉检查工具变量的实际类型,同时也能在运行时做一次校验:
from rest_framework.response import Response # 前面的请求创建代码不变 refresh_view = TokenRefreshView.as_view() refresh_response = refresh_view(new_request) assert isinstance(refresh_response, Response) refresh_response.data["message"] = "Token refresh successful"
3. 安装类型提示库(长期解决方案)
安装DRF的类型 stub 库,提升静态检查工具的类型推断准确性:
pip install djangorestframework-stubs django-stubs
之后Pylance/Pylint就能正确识别DRF相关的类型,不会再出现这类误报。
补充说明
运行时代码其实能正常执行,只是静态检查的类型推断出了问题,上面的方法都能解决这个提示问题。
内容的提问来源于stack exchange,提问作者andy_H
相关产品推荐
相关产品推荐

