РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
18 of 307 menu

Метод middleware

Метод middleware применяется к приложению FastAPI и регистрирует функцию промежуточного слоя. Первым параметром передаётся тип middleware, например 'http'. Метод возвращает декоратор, который принимает асинхронную функцию с параметрами request и call_next.

Синтаксис

@app.middleware(type)

Пример

Давайте добавим middleware, который замеряет время обработки запроса:

import time from fastapi import FastAPI, Request app = FastAPI() @app.middleware('http') async def add_process_time_header(request: Request, call_next): start_time = time.time() response = await call_next(request) process_time = time.time() - start_time response.headers['X-Process-Time'] = str(process_time) return response @app.get('/') def index(): return {'text': 'hello'}

Результат выполнения кода для адреса /:

{"text": "hello"}

Пример

Давайте добавим middleware, который проверяет наличие заголовка авторизации:

from fastapi import FastAPI, Request from fastapi.responses import JSONResponse app = FastAPI() @app.middleware('http') async def check_auth(request: Request, call_next): if request.url.path == '/user': token = request.headers.get('Authorization') if not token: return JSONResponse( status_code=401, content={'message': 'Unauthorized'} ) response = await call_next(request) return response @app.get('/user') def user(): return {'name': 'abcde'}

Результат выполнения кода для адреса /user без заголовка Authorization:

{"message": "Unauthorized"}

Смотрите также

  • метод add_middleware,
    который добавляет middleware из класса
  • класс FastAPI,
    который создаёт приложение
  • метод exception_handler,
    который обрабатывает исключения
  • метод on_event,
    который вешает обработчик на событие
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить