6.2 Middleware (CORS, Session, Custom)
9 из 9 шагов пройдено
7 из 7 баллов  получено

CustomMiddleware на основе функций

При создании промежуточного программного обеспечения на основе функций мы можем использовать декоратор @app.middleware("http"), поверх функции, чтобы указать, что функция будет действовать как промежуточное программное обеспечение. Это говорит FastAPI зарегистрировать функцию как компонент Middleware.

 За основу возьмем следующее приложение:

from fastapi import FastAPI


app = FastAPI()


@app.get("/hello")
async def greeter():
    return {"Hello": "World"}


@app.get("/goodbye")
async def farewell():
    return {"Goodbye": "World"}

И напишем наш кастомную функцию Middleware, которая также будет считать время выполнения запросов:

from fastapi import FastAPI, Request
import time

app = FastAPI()


@app.middleware("http")
async def modify_request_response_middleware(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    duration = time.time() - start_time
    print(f"Request duration: {duration:.10f} seconds")
    return response


@app.get("/hello")
async def greeter():
    return {"Hello": "World"}


@app.get("/goodbye")
async def farewell():
    return {"Goodbye": "World"}

Функция промежуточного программного обеспечения получает два параметра:

  • request: Содержит всю информацию и данные, связанные с входящим запросом.
  • call_next: Вызывая функцию call_next, промежуточное программное обеспечение гарантирует, что запрос переходит к соответствующей операции пути и ждет результирующего ответа.

Запустим сервер и проверим работу. Теперь при каждой отправке запросов, мы будем видеть время выполнения этих запросов.

INFO:     127.0.0.1:49289 - "GET /docs HTTP/1.1" 200 OK
Request duration: 0.0003540516 seconds
INFO:     127.0.0.1:49289 - "GET /openapi.json HTTP/1.1" 200 OK
Request duration: 0.0006909370 seconds
INFO:     127.0.0.1:49289 - "GET /hello HTTP/1.1" 200 OK
Request duration: 0.0006380081 seconds
INFO:     127.0.0.1:49289 - "GET /goodbye HTTP/1.1" 200 OK

Наше промежуточное программное обеспечение будет также, как и на классах, работать каждый раз, когда мы запрашиваем один из определенных маршрутов API.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Нет обсуждений. Начните первое.