django 测试文件下载 - “ValueError:已关闭文件上的 I/O 操作”

2023-12-19

我有一个用于文件下载的视图代码,并且它在浏览器中运行良好。现在我尝试使用内部 django Client.get 为其编写一个测试:

    response = self.client.get("/compile-book/", {'id': book.id})
    self.assertEqual(response.status_code, 200)
    self.assertEquals(response.get('Content-Disposition'), 
                      "attachment; filename=book.zip")

到目前为止,一切都很好。现在我想测试下载的文件是否是我期望下载的文件。所以我首先说:

    f = cStringIO.StringIO(response.content)

现在我的测试运行者响应如下:

Traceback (most recent call last):
  File ".../tests.py", line 154, in test_download
    f = cStringIO.StringIO(response.content)
  File "/home/epub/projects/epub-env/lib/python2.7/site-packages/django/http/response.py", line 282, in content
    self._consume_content()
  File "/home/epub/projects/epub-env/lib/python2.7/site-packages/django/http/response.py", line 278, in _consume_content
    self.content = b''.join(self.make_bytes(e) for e in self._container)   
  File "/home/epub/projects/epub-env/lib/python2.7/site-packages/django/http/response.py", line 278, in <genexpr>
    self.content = b''.join(self.make_bytes(e) for e in self._container)   
  File "/usr/lib/python2.7/wsgiref/util.py", line 30, in next 
    data = self.filelike.read(self.blksize) 
ValueError: I/O operation on closed file

即使我简单地执行: self.assertIsNotNone(response.content) 我也会得到相同的 ValueError

The only在整个互联网(包括 django 文档)上我能找到的关于测试下载的主题是这个 stackoverflow 主题:用于测试文件下载的 Django 单元测试 https://stackoverflow.com/questions/8244220/django-unit-test-for-testing-a-file-download。尝试该解决方案导致了这些结果。它既古老又罕见,足以让我提出一个新问题。

有人知道 Django 中应该如何处理下载测试吗? (顺便说一句,在 python 2.7 上运行 django 1.5)


这对我们有用。我们回来rest_framework.response.Response但它也应该适用于常规 Django 响应。

import io
response = self.client.get(download_url, {'id': archive_id})
downloaded_file = io.BytesIO(b"".join(response.streaming_content))

Note: streaming_content仅适用于StreamingHttpResponse(也是 Django 1.10):https://docs.djangoproject.com/en/1.10/ref/request-response/#django.http.StreamingHttpResponse.streaming_content https://docs.djangoproject.com/en/1.10/ref/request-response/#django.http.StreamingHttpResponse.streaming_content

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django 测试文件下载 - “ValueError:已关闭文件上的 I/O 操作” 的相关文章

  • 将 numpy 数组写入文本文件的速度

    我需要将一个非常 高 的两列数组写入文本文件 而且速度非常慢 我发现如果我将数组改造成更宽的数组 写入速度会快得多 例如 import time import numpy as np dataMat1 np random rand 1000
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • 使用 scipy curve_fit 拟合噪声指数的建议?

    我正在尝试拟合通常按以下方式建模的数据 def fit eq x a b c d e return a 1 np exp x b c np exp x d e x np arange 0 100 0 001 y fit eq x 1 1 1
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • Swift 单元测试 - 如何断言 CGColor 是它应该的样子?

    使用 Xcode V7 2 尝试进行单元测试 需要验证是否已设置正确的颜色 并收到以下消息 Cannot invoke XCTAssertEqual with an argument list of type CGColor CGColor
  • 与 while 循环一样,如何跳过 for 循环中的步骤?

    我尝试像 while 循环一样跳过 for 循环中的几个步骤 在 while 循环中 步骤根据特定条件进行调整 如下面的代码所示 i 0 while i lt 10 if i 3 i 5 else print i i i 1 result
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 对数据帧的每 2 小时数据进行 Groupby

    我有一个数据框 Time T201FN1ST2010 T201FN1VT2010 1791 2017 12 26 00 00 00 854 69 0 87 1792 2017 12 26 00 20 00 855 76 0 87 1793
  • 我应该在什么模型中添加ManyToManyField?

    我读了有关多对多关系的文档 https docs djangoproject com en dev ref models fields ref manytomany和examples https docs djangoproject com
  • 如何循环遍历字典列表并打印特定键的值?

    我是 Python 新手 有一个问题 我知道这是一个非常简单的问题 运行Python 3 4 我有一个需要迭代并提取特定信息的列表 以下是列表 称为部分 的示例 已截断 数千个项目 state DEAD id phwl type name
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切

随机推荐

  • 使用 Spring Boot Data JPA 按需创建表

    我正在尝试创建一个 Spring Boot 应用程序 我想在其中按需创建和使用数据库表 而不为它们定义实体 存储库 我有一个基本 Business 实体和 BusinessType 实体来保留业务类型 我希望能够使用自己的表为业务类型 例如
  • 对溢出范围进行条件格式化

    这可能是一个重复的问题 但如果我们还没有此功能 那将是令人惊讶的 我有一张桌子Table5在 C 列中 其高度可能会改变 在 E 列中 我有一个公式 例如提取唯一值 因此生成的溢出范围具有动态高度 我想对生成的溢出范围进行条件格式设置 例如
  • M1 Mac Tensorflow VS Code Rosetta2

    我正在努力使用 M1 mac 安装 TensorFlow 我有 python 3 9 7 和 Monterrey 12 3 以及 Apple Silicon Visual Studio 代码 有一个苹果解决方案 涉及 miniconda 苹
  • WCF服务设计模式

    我想创建一个 WCF 服务 做到这一点的最佳设计模式是什么 例如三个独立的项目 如下所示 1 数据合约2 业务逻辑3 SvcHost项目 这听起来并不太糟糕 尽管我可能会将 DataContract 和 SvcHostProject 结合起
  • Firebase 引用未声明

    我创建了一个新的 Xcode 项目 将 Firebase pod 添加到我的 pod 文件中并安装它 并根据 Firebase 文档添加了 Google services plist 文件和其余部分 导入 Firebase工作正常 但如果我
  • 模型更改时不会调用 ngModel.$render

    我正在尝试将 tinymce 与 Angular 一起使用 但指令中的 render 函数遇到一些问题 当我更新模型时 不会调用 render 函数 这里用一个plunkr来说明 http plnkr co edit Ih1nDq p pr
  • 如何删除搜索索引本身

    搜索索引有一个删除文档的方法 https cloud google com appengine docs standard python search indexclass https cloud google com appengine
  • 使用 C# 截取设备屏幕的屏幕截图

    嗨 有没有办法截取在WINDOWS CE5 0设备屏幕上运行的应用程序的屏幕截图 提前致谢 using System using System Collections Generic using System IO using System
  • 实施应用程序品牌的行业标准?

    我目前正在制作原型 为我们的应用程序添加本地化和品牌支持 目前 我已经能够成功地利用本地化框架和定制文化来支持本地化和品牌推广 自定义文化使我能够拥有一个 en US BrandA 资源 DLL 其中包含 BrandA 的 en US 语言
  • 如何将每行中特定索引中的值替换为numpy数组中的相应值

    我的数据框如下所示 datetime1 datetime2 datetime3 datetime4 id 1 5 6 5 5 2 7 2 3 5 3 4 2 3 2 4 6 4 4 7 5 7 3 8 9 我有一个像这样的 numpy 数组
  • Nant 因构建服务器上的权限错误而失败

    完全新手问题 我正在尝试在构建服务器上运行 Nant 脚本 非常基本的脚本 不执行任何操作 但它失败并出现错误 System Security SecurityException 请求 System Security Permissions
  • RoR:has_one“或另一个”? (或者,没有继承的多态性。)

    大家好 我的项目有一个有趣的要求 我需要一个has one关系 其中它要么是一个类 要么是另一个类 但没有继承 如果这是唯一的方法 我可以摆脱继承 但是两个关联记录具有完全不同的数据并且根本不相关 我需要弄清楚的是类似以下内容 1 Foo
  • Python - 将对象的属性复制到另一个对象的正确方法是什么?

    我有两节课 除了 2 个属性外 它们几乎相同 我需要将所有属性从一个属性复制到另一个属性 我只是想知道如果有一个模式或最佳实践 or如果我基本上应该这样做 spam attribute one foo attribute one spam
  • 如何在 Android NDK 中使用 pthreads? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 据我所知 pthreads 是 C
  • 在 Swift 中使用 UIAlertController 更改警报的标题和消息字体

    我正在尝试更改使用 UIAlertController 显示的警报的标题和消息字体 我正在尝试使用 NSAttributedStirng 进行操作 但它会给出编译器错误 无法采用 NSAttributed 字符串代替 Stirng 我尝试过
  • 启用自动缩放后,GKE 不会缩放到 0/从 0 缩放

    我想在我的 GKE 上运行 CronJob 以便每天执行批处理操作 理想的情况是 我的集群在作业未运行时扩展到 0 个节点 并在每次满足计划时动态扩展到 1 个节点并在其上运行作业 我首先尝试使用一个简单的 CronJob 来实现这一点库伯
  • new FormData() "application/x-www-form-urlencoded"

    Couchdb 仅解析 application x www form urlencoded 是否有设置 enctype 的 FormData 属性 xhr open put document myForm action false xhr
  • 如何忽略“__init__.py”文件中的 Pyflakes 错误“已导入但未使用”?

    我将测试分成多个 Python 文件 tests init py test apples py test bananas py py 我将测试导入 init py 文件中 from test apples import ApplesTest
  • 期间发生内部错误:“更新 Maven 项目”。不支持的 IClasspathEntry kind=4

    正如标题提到的 我有以下问题 我使用Eclipse with Maven Nature当我更新 Maven 项目时 出现以下错误 期间发生内部错误 更新 Maven 项目 不支持的 IClasspathEntry kind 4 总是返回的解
  • django 测试文件下载 - “ValueError:已关闭文件上的 I/O 操作”

    我有一个用于文件下载的视图代码 并且它在浏览器中运行良好 现在我尝试使用内部 django Client get 为其编写一个测试 response self client get compile book id book id self