Атрибут background
Атрибут background применяется к объекту ответа
класса Response и хранит объект BackgroundTasks
или любую другую задачу, которая должна выполниться
после того, как ответ уже отправлен клиенту.
По умолчанию атрибут равен None.
Чаще всего он заполняется автоматически,
когда обработчик маршрута принимает параметр
типа BackgroundTasks.
Синтаксис
response.background
Пример
Давайте создадим ответ и передадим ему объект
BackgroundTasks, чтобы после отправки ответа
выполнилась функция записи в лог:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from starlette.background import BackgroundTask
app = FastAPI()
def write_log(message: str):
with open('log.txt', 'a') as f:
f.write(message + '\n')
@app.get('/')
def index():
task = BackgroundTask(write_log, 'page visited')
res = JSONResponse(
content={'text': 'hello'},
background=task
)
return res
Результат выполнения кода для адреса /:
{"text": "hello"}
После отправки ответа в файл log.txt
будет добавлена строка page visited.
Пример
Давайте проверим значение атрибута background
у ответа, созданного без фоновой задачи:
Результат выполнения кода:
{"background": "None"}
Пример
Давайте воспользуемся параметром BackgroundTasks
в обработчике маршрута, чтобы FastAPI сам заполнил
атрибут background ответа:
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def send_email(email: str):
print(f'email sent to {email}')
@app.get('/user/{email}')
def user(email: str, tasks: BackgroundTasks):
tasks.add_task(send_email, email)
return {'email': email}
Результат выполнения кода для адреса /user/user@abcde:
{"email": "user@abcde"}
После отправки ответа будет вызвана функция send_email
и в консоль выведется строка email sent to user@abcde.
Смотрите также
-
класс
Response,
который является базовым классом для всех ответов -
атрибут
status_code,
который хранит HTTP-код состояния ответа -
атрибут
headers,
который хранит заголовки ответа -
атрибут
body,
который хранит тело ответа