Django4.0 中间件-处理流式响应

2022-03-16 17:46 更新

与 ​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)


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号