在Django FileResponse上迭代streaming_content属性

Esq*_*lax 5 python django django-rest-framework

我正在使用django rest框架开发api,并且正在编写一些单元测试来检查关键操作。我在尝试执行获取请求后读取文件的内容

downloaded_file = self.client.get(textfile)
Run Code Online (Sandbox Code Playgroud)

问题是返回的对象类型为:django.http.response.FileResponse,它继承自StreamingHttpResponse

我正在尝试遍历streaming_content属性,该属性应该是迭代器,但是我无法进行迭代,没有方法next()

我检查了这个对象,得到的是地图对象。关于如何从此请求中获取内容的任何想法?

编辑:

问题解决了

返回的对象是一个映射,一个映射具有一个函数和一个可迭代的对象:

https://docs.python.org/3.4/library/functions.html#map

我要做的是将地图转换为列表,访问列表的第一个元素,然后从字节转换为字符串。不是很优雅,但可以。

list(response.streaming_content)[0].decode("utf-8")
Run Code Online (Sandbox Code Playgroud)

Rég*_* B. 11

以下是从streaming_content地图中提取内容的方法:

content = downloaded_file.getvalue()
Run Code Online (Sandbox Code Playgroud)

查看该getvalue()方法的代码,我们看到它只是迭代了答案内容:

class StreamingHttpResponse(HttpResponseBase):
    ...
    def getvalue(self):
        return b''.join(self.streaming_content)
Run Code Online (Sandbox Code Playgroud)