Python:通过返回块生成gzip字符串

Python:通过返回块生成gzip字符串,python,django,Python,Django,我会要求一些我在Stackoverflow上找不到的东西。 我正在做一些Django,最近我发现我可以使用生成器对HTTP输出进行流式处理。 页面的输出对于正常情况来说是完美的,但是我想使用GZip压缩流化页面输出 我尝试过使用简单的zlib.compress函数,但没有效果。该函数生成小的gzip文件 我希望在处理数据时以字符串的形式返回小块数据。这些块应该构成gzip文件的内容。你会怎么做? 谢谢。压缩内容是Web服务器的属性,而不是框架的属性。如果您使用的是apache,则可以使用。我希望

我会要求一些我在Stackoverflow上找不到的东西。 我正在做一些Django,最近我发现我可以使用生成器对HTTP输出进行流式处理。 页面的输出对于正常情况来说是完美的,但是我想使用GZip压缩流化页面输出

我尝试过使用简单的zlib.compress函数,但没有效果。该函数生成小的gzip文件

我希望在处理数据时以字符串的形式返回小块数据。这些块应该构成gzip文件的内容。你会怎么做?
谢谢。

压缩内容是Web服务器的属性,而不是框架的属性。如果您使用的是apache,则可以使用。我希望您不是指django出于测试目的提供的简单服务器。如果您是指这样做,那么只需查看术语
gzip
的代码,看看它是否有任何压缩

此外,如果您正在考虑压缩,请注意,最好将此作业移动到web服务器。

使用
zlib.compressobj([level])
Compress.Compress(string)
Compress.flush([mode])
完成

import zlib
def compress(chunks):
    c = zlib.compressobj()
    for chunk in chunks:
       yield c.compress(chunk)
    yield c.flush(zlib.Z_FINISH)

非常感谢您的快速回复。我实际上使用nginx作为django代码的代理。在这种配置中,我不确定要求nginx到gzip输出是否有效:我还没有测试过(我的错误),但如果它等待输出完成,这将是有意义的,而这不是我想要的。在Stackoverflow上,与往常一样,非常快的回答。非常感谢。代码看起来不错,但不起作用,浏览器返回生成页面的错误。是否为deflate设置了正确的标题?嗯,实际上我不知道。我已将“内容编码”设置为“gzip”:
response['Content-Encoding']=“gzip”
。不设置此标题会返回预期的乱码数据。问题是,这不会产生gzip,而是产生deflate编码,因此您需要将
response['Content-encoding']=“deflate”
设置为完美,Dan。不幸的是,浏览器会等待输出完成。[…一分钟过去了..]
产生c.flush(zlib.Z_SYNC_flush)
当您想将输出刷新到浏览器时,解决了这个问题。非常感谢你。