Метод add_middleware
Метод add_middleware применяется к приложению
FastAPI и добавляет промежуточное ПО (middleware),
которое обрабатывает каждый запрос до и после
основного обработчика. Первым параметром передаётся
класс middleware, вторым - его параметры.
Middleware вызывается для всех маршрутов приложения.
Синтаксис
app.add_middleware(middleware_class, **options)
Пример
Давайте добавим middleware CORSMiddleware
для разрешения кросс-доменных запросов:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['*'],
allow_methods=['*'],
allow_headers=['*'],
)
@app.get('/')
def index():
return {'text': 'hello'}
Результат выполнения кода для адреса /:
{"text": "hello"}
Пример
Давайте добавим собственный middleware-класс, который замеряет время обработки запроса:
import time
from fastapi import FastAPI
app = FastAPI()
class TimerMiddleware:
def __init__(self, app):
self.app = app
async def __call__(self, scope, receive, send):
start = time.time()
await self.app(scope, receive, send)
print('time:', time.time() - start)
app.add_middleware(TimerMiddleware)
@app.get('/')
def index():
return {'text': 'hello'}
Результат выполнения кода после запроса на адрес /:
time: 0.00042
Пример
Давайте добавим middleware GZipMiddleware
для сжатия ответов:
from fastapi import FastAPI
from fastapi.middleware.gzip import GZipMiddleware
app = FastAPI()
app.add_middleware(GZipMiddleware, minimum_size=1000)
@app.get('/')
def index():
return {'text': 'abcde' * 500}
Результат выполнения кода:
{"text": "abcdeabcdeabcde..."}
Смотрите также
-
метод
middleware,
который является декоратором для добавления middleware -
метод
add_exception_handler,
который добавляет обработчик исключений -
метод
include_router,
который подключает роутер к приложению -
метод
mount,
который монтирует подприложение по указанному пути