在使用 Flask 的 python 中,如何写出一个对象以供下载?

Posted

技术标签:

【中文标题】在使用 Flask 的 python 中,如何写出一个对象以供下载?【英文标题】:In python using Flask, how can I write out an object for download? 【发布时间】:2012-08-23 09:59:15 【问题描述】:

我正在使用 Flask 和运行工头。我在内存中构建的数据,我希望用户能够将这些数据下载到文本文件中。我不想将数据写入本地磁盘上的文件并使其可供下载。

我是 python 新手。我想我会在内存中创建一些文件对象,然后设置响应头,也许?

【问题讨论】:

【参考方案1】:

Flask 文档的“模式”部分介绍了将文件流式传输到客户端而不将它们保存到磁盘 - 具体而言,in the section on streaming。基本上,您所做的是返回一个完整的 Response 对象来包装您的迭代器:

from flask import Response

# construct your app

@app.route("/get-file")
def get_file():
    results = generate_file_data()
    generator = (cell for row in results
                    for cell in row)

    return Response(generator,
                       mimetype="text/plain",
                       headers="Content-Disposition":
                                    "attachment;filename=test.txt")

【讨论】:

我不知道结果中的行的哪个单元格...正在做什么,你能解释一下吗? @swidnikk - 这是一个生成器表达式 - 它类似于列表推导表达式 [x for x in range(10)],除了它生成的是生成器对象而不是列表。 (x for x in range(10)) 不会一次生成整个列表。相反,每次调用__next__(Python 2.X 中的next)时,它都会懒惰地评估x 的下一个值。文档向您展示了使用 yield (def generator_func(): for x in range(10): yield x) 创建生成器的不同方法。嵌套的 for 表达式在那里,因为我假设了列表类型的数据结构。这有意义吗? 谢谢。我不知道如何查找更多信息。我现在明白了,并在此处的文档中找到了它:docs.python.org/tutorial/classes.html#generators 我想如果我正在创建的文件变得太大而无法保存在内存中,这将特别有用。

以上是关于在使用 Flask 的 python 中,如何写出一个对象以供下载?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用 Flask 执行周期性任务

如何在 Python/Flask 中故意导致 400 错误请求?

如何使用flask在python脚本中处理上传的csv文件

python中flask如何降低内存?

如何使用 pip 在 Python3 上安装 Flask?

02-模板(过滤器,控制代码块)