Метод 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,
который вешает обработчик на событие