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

Django单元测试报错:AttributeError: 'HttpResponse'无data属性

AttributeError: 'HttpResponse' object has no attribute 'data' 解决方法

错误原因

这个报错的核心是:Django原生的HttpResponse对象没有data属性,data是Django REST Framework(DRF)专属Response类的属性。你的测试代码里试图访问res.data,但当前请求返回的是普通HttpResponse,因此触发了属性不存在的错误。

具体修复方案

根据你的注册视图类型,分两种情况处理:

情况1:注册视图基于DRF编写

如果你的注册接口用了DRF的APIView或视图集,测试时必须用DRF提供的APIClient,而不是Django原生的Client。原生Client只能返回普通HttpResponse,APIClient则会返回DRF的Response对象,自带data属性。

  1. 修改你的TestSetUp类,替换为DRF的APIClient:
# test_setup.py
from rest_framework.test import APIClient
from django.test import TestCase
from django.urls import reverse

class TestSetUp(TestCase):
    def setUp(self):
        # 用DRF的APIClient替换Django原生Client
        self.client = APIClient()
        self.register_url = reverse('你的注册URL名称')
        self.user_data = {
            'email': 'test@example.com',
            'username': 'testuser',
            'password': 'testpass123'
        }
        super().setUp()
  1. 测试方法可保留原有的res.data写法:
def test_user_can_register_successfully(self):
    res = self.client.post(
        self.register_url, self.user_data, format="json")
    self.assertEqual(res.data['email'], self.user_data['email'])
    self.assertEqual(res.data['username'], self.user_data['username'])
    self.assertEqual(res.status_code, 201)

情况2:注册视图是Django原生视图

如果你的视图用的是Django原生View,返回的是JsonResponse或普通HttpResponse,需要通过json()方法解析响应体,而非直接访问data:

修改测试方法如下:

def test_user_can_register_successfully(self):
    # 原生Client用json参数传递数据,自动设置content_type
    res = self.client.post(self.register_url, json=self.user_data)
    # 解析响应体为字典
    response_data = res.json()
    self.assertEqual(response_data['email'], self.user_data['email'])
    self.assertEqual(response_data['username'], self.user_data['username'])
    self.assertEqual(res.status_code, 201)

额外检查点

  • 确认注册视图的返回类型:如果用DRF,需确保视图继承自APIView或DRF其他基类,且返回Response对象。
  • 原生Client的format="json"参数无效,建议用json参数传递数据,或手动设置content_type="application/json"并序列化数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:32:39