РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
101 of 643 menu

Функция stream_with_context

Функция stream_with_context применяется для оборачивания генератора, который возвращает потоковые данные. По умолчанию, когда Flask начинает отправлять ответ клиенту, контекст запроса уничтожается. Если внутри генератора необходимо обратиться к объектам request, session или g, без этой функции возникнет ошибка. Функция принимает один аргумент - генератор или итерируемый объект, и возвращает обёртку, сохраняющую контекст на время выполнения итерации.

Синтаксис

from flask import stream_with_context stream_with_context(generator)

Пример

Давайте создадим маршрут, который возвращает поток данных и использует объект request внутри генератора:

from flask import Flask, stream_with_context, request, Response app = Flask(__name__) @app.route('/stream') def stream(): @stream_with_context def generate(): for i in range(5): yield f'data: {i} - path: {request.path}\n' return Response(generate(), mimetype='text/plain')

Результат выполнения кода для адреса /stream:

<+html+> data: 0 - path: /stream data: 1 - path: /stream data: 2 - path: /stream data: 3 - path: /stream data: 4 - path: /stream <-html+>

Пример

Давайте используем функцию как обёртку для генератора, который читает данные из session:

from flask import Flask, stream_with_context, session, Response app = Flask(__name__) app.secret_key = 'secret' @app.route('/set') def set_session(): session['user'] = 'abcde' return 'session set' @app.route('/get') def get_stream(): def generate(): for i in range(3): yield f'{session.get("user", "guest")} - {i}\n' return Response(stream_with_context(generate()), mimetype='text/plain')

Результат выполнения кода для адреса /get после посещения /set:

<+html+> abcde - 0 abcde - 1 abcde - 2 <-html+>

Смотрите также

  • функцию jsonify,
    которая создаёт JSON-ответ
  • функцию make_response,
    которая создаёт объект ответа
  • функцию copy_current_request_context,
    которая копирует контекст запроса для использования в другом потоке
  • функцию after_this_request,
    которая выполняет код после завершения текущего запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить