Метод copy
Метод copy применяется к объекту
RequestContext и возвращает новый
объект RequestContext, который
содержит те же данные, что и оригинал, но
является независимым. Это полезно, когда
нужно сохранить контекст запроса для
дальнейшего использования, например в
фоновом потоке, не изменяя при этом
оригинальный контекст. Метод не принимает
параметров.
Синтаксис
ctx.copy()
Пример
Давайте получим текущий контекст запроса и создадим его копию:
from flask import Flask, request
from flask.globals import request_ctx
app = Flask(__name__)
@app.route('/')
def index():
ctx = request_ctx._get_current_object()
ctx_copy = ctx.copy()
return f"original: {ctx.request.path}, copy: {ctx_copy.request.path}"
Результат выполнения кода для адреса /:
original: /, copy: /
Пример
Давайте создадим копию контекста и используем её внутри другого потока:
from flask import Flask, request
from flask.globals import request_ctx
import threading
app = Flask(__name__)
@app.route('/user/<name>')
def user(name):
ctx = request_ctx._get_current_object()
ctx_copy = ctx.copy()
def worker():
print(f"thread path: {ctx_copy.request.path}")
thread = threading.Thread(target=worker)
thread.start()
thread.join()
return f"name: {name}"
Результат выполнения кода для адреса /user/abcde:
"thread path: /user/abcde"
Смотрите также
-
класс
RequestContext,
который представляет контекст запроса -
метод
push,
который помещает контекст в стек -
метод
pop,
который извлекает контекст из стека -
метод
match_request,
который сопоставляет запрос с маршрутом