Функция copy_current_request_context
Функция copy_current_request_context применяется для сохранения
контекста текущего HTTP-запроса. Она возвращает декоратор, который
копирует объект запроса и привязывает его к переданной функции.
Это позволяет обращаться к request, session или g
внутри асинхронных задач или новых потоков, где контекст запроса
по умолчанию недоступен.
Функция не принимает аргументов. Она должна вызываться внутри активного контекста запроса. Возвращённый декоратор применяется к функции, которая будет выполнена позже в другом потоке.
Синтаксис
from flask import copy_current_request_context
@copy_current_request_context
def func():
...
Пример
Давайте скопируем контекст запроса и передадим его в новый поток,
чтобы получить доступ к request внутри фоновой задачи:
from flask import Flask, request, copy_current_request_context
import threading
app = Flask(__name__)
@app.route('/')
def index():
@copy_current_request_context
def background_task():
print('Path:', request.path)
thread = threading.Thread(target=background_task)
thread.start()
thread.join()
return 'hello'
Результат выполнения кода в консоли:
"Path: /"
Пример
Давайте сохраним данные из session и используем их в фоновой
задаче после завершения запроса:
from flask import Flask, session, copy_current_request_context
import threading
app = Flask(__name__)
app.secret_key = 'abcde'
@app.route('/')
def index():
session['user'] = 'article'
@copy_current_request_context
def background_task():
print('User:', session.get('user'))
thread = threading.Thread(target=background_task)
thread.start()
thread.join()
return 'hello'
Результат выполнения кода в консоли:
"User: article"
Смотрите также
-
функцию
stream_with_context,
которая сохраняет контекст при потоковой передаче -
функцию
after_this_request,
которая выполняет код после текущего запроса -
функцию
make_response,
которая создаёт объект ответа -
функцию
jsonify,
которая формирует JSON-ответ