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

Атрибут dependencies

Атрибут dependencies класса APIRouter принимает список зависимостей, которые FastAPI выполняет перед каждым обработчиком, зарегистрированным в этом роутере. Это удобно, когда одна и та же проверка нужна сразу для нескольких маршрутов: например, авторизация, проверка токена или логирование. Зависимости задаются при создании роутера и применяются ко всем его маршрутам.

Каждая зависимость - это функция или класс, который FastAPI вызывает до основного обработчика. Если зависимость вернёт ошибку или выбросит исключение, основной обработчик не выполнится.

Синтаксис

router = APIRouter(dependencies=[dep1, dep2])

Пример

Давайте создадим простую зависимость, которая проверяет заголовок запроса, и применим её ко всем маршрутам роутера:

from fastapi import FastAPI, APIRouter, Depends, Header, HTTPException app = FastAPI() def verify_token(x_token: str = Header()): if x_token != 'secret': raise HTTPException(status_code=400, detail='Invalid token') router = APIRouter(dependencies=[Depends(verify_token)]) @router.get('/items') def get_items(): return {'items': [1, 2, 3, 4, 5]} @router.get('/users') def get_users(): return {'users': ['abcde', 'article', 'user']} app.include_router(router)

Теперь при обращении к /items или /users FastAPI сначала выполнит функцию verify_token. Если заголовок x-token не равен 'secret', вернётся ошибка 400.

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

{"items": [1, 2, 3, 4, 5]}

Пример

Давайте добавим несколько зависимостей сразу: одну для проверки токена, другую для логирования:

from fastapi import FastAPI, APIRouter, Depends, Header, HTTPException app = FastAPI() def verify_token(x_token: str = Header()): if x_token != 'secret': raise HTTPException(status_code=400, detail='Invalid token') def log_request(): print('Request received') router = APIRouter(dependencies=[Depends(verify_token), Depends(log_request)]) @router.get('/hello') def hello(): return {'text': 'hello'} app.include_router(router)

При каждом запросе к /hello сначала выполнится проверка токена, затем логирование, и только потом обработчик вернёт ответ.

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

{"text": "hello"}

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

  • класс APIRouter,
    который группирует маршруты в отдельный роутер
  • атрибут prefix,
    который задаёт общий префикс для всех маршрутов роутера
  • атрибут tags,
    который задаёт теги для документации роутера
  • метод include_router,
    который подключает роутер к приложению
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить