Django4 中文入门教程 Django4.0 中间件-处理流式响应

2024-02-25 开发教程 Django4 中文入门教程 匿名 5

与 ​HttpResponse ​不同,​StreamingHttpResponse​ 没有 ​content ​属性。因此,中间件不能再假设所有响应有 ​content ​属性。如果它们需要访问 ​content​,它们必须为流式响应进行测试,并且调整其行为:

if response.streaming:
response.streaming_content = wrap_streaming_content(response.streaming_content)
else:
response.content = alter_content(response.content)

注解:​streaming_content ​被假设为体积太大而无法在内存中保存。响应中间件可以将其包装在一个新的生成器里,但不能使用它。包装通常如下实现:

def wrap_streaming_content(content):
for chunk in content:
yield alter_content(chunk)