现在位置: 首页 > Flask 教程 > 正文

Flask Stream Helpers API

stream_with_context 用于在生成器函数中保持请求上下文,使流式响应中仍能访问 request、session 等对象。


stream_with_context

参数 类型 说明
generator_or_function iterator / callable 生成器函数或可调用对象。作为装饰器或包装函数使用

两种用法

用法 说明
装饰器模式 @stream_with_context 装饰生成器函数
包装模式 stream_with_context(generator()) 包裹已创建的生成器

注意事项:一旦响应体开始发送,就不能再修改响应头。如果生成器中需要访问 session,必须在视图函数中先访问 session 以触发 Vary: Cookie 头的设置。


代码示例

实例

from flask import Flask, stream_with_context, request, Response

app = Flask(__name__)

@app.get("/stream")
def streamed_response():
    """流式响应示例:逐行发送数据"""
    @stream_with_context
    def generate():
        # 即使响应已开始发送,仍可访问 request
        yield f"data: Hello {request.args.get('name', 'RUNOOB')}\n"
        for i in range(5):
            yield f"data: Line {i}\n"
        yield "data: [DONE]\n"

    return Response(generate(), mimetype="text/event-stream")

@app.get("/stream-wrap")
def stream_wrap():
    """包装模式"""
    def generate():
        yield "Hello "
        yield request.args.get("name", "World")
        yield "!"

    # 使用 stream_with_context 包裹已创建的生成器
    return Response(stream_with_context(generate()))