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

Django测试Post请求返回response.content为空的问题排查与解决

Fixing Empty response.content When Testing Django CreateView with POST Request

我来帮你解决这个问题——你遇到的空response.content是因为Django测试客户端默认不跟随重定向导致的,具体原因和修复方法如下:

问题根源

你的CreateNote视图继承自CreateView,当表单验证通过、数据创建成功后,它会自动跳转到success_url指定的index页面。而Django测试客户端的post()方法默认不会自动跟随重定向,此时返回的response对象对应的是3xx重定向响应,这类响应本身没有实体内容,所以response.content就会是空字节串b''。

快速修复方案

只需要在client.post()调用中添加follow=True参数,让测试客户端自动跟随重定向,这样返回的response就是最终跳转后的页面内容了:

修正后的测试代码

class NoteTest(TestCase):
    def test_createNote(self):
        # 添加follow=True参数,让客户端跟随重定向
        response = self.client.post('/notes/create', {'text': 'hello world!'}, follow=True)
        print(response.content)  # 现在会输出index视图返回的"Hello!"内容

额外验证技巧

如果你想单独验证重定向行为是否正确,也可以不使用follow=True,而是直接断言重定向的状态码和目标URL:

from django.urls import reverse

class NoteTest(TestCase):
    def test_createNote_redirect(self):
        response = self.client.post('/notes/create', {'text': 'hello world!'})
        # 验证是重定向响应
        self.assertEqual(response.status_code, 302)
        # 验证重定向目标URL正确
        self.assertEqual(response.url, reverse('index'))

另外,当使用follow=True时,还可以通过response.redirect_chain属性查看完整的重定向路径列表,方便调试复杂的跳转逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:14:13