【发布时间】:2015-04-24 19:22:53
【问题描述】:
我正在使用 django rest 框架开发一个 api,并且我正在编写一些单元测试来检查关键操作。我正在尝试在执行 get 请求后读取文件的内容
downloaded_file = self.client.get(textfile)
问题是返回的对象是类型:django.http.response.FileResponse,它继承自StreamingHttpResponse。
我正在尝试迭代 streaming_content 属性,它应该是一个迭代器,但我无法迭代,没有方法 next()。
我检查了这个对象,我得到的是地图对象。关于如何从此请求中获取内容的任何想法?
编辑:
问题解决
返回的对象是一个map,一个map接受一个函数和一个iterable:
https://docs.python.org/3.4/library/functions.html#map
我要做的就是将地图转换为列表,访问列表的第一个元素并将字节转换为字符串。不是很优雅,但很有效。
list(response.streaming_content)[0].decode("utf-8")
【问题讨论】:
-
对于 python 2.7 和 django 1.8 以上只返回第一行。但这将返回所有内容: "".join([x for x in response.streaming_content])
-
确实,建议的解决方案“不是很优雅”:)。无需投到
list(见我的回答)。
标签: python django django-rest-framework