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

Функция Depends

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

Синтаксис

Depends(dependency, use_cache=True)

Пример

Давайте объявим простую зависимость и внедрим её в обработчик:

from fastapi import FastAPI, Depends app = FastAPI() def get_user() -> str: return 'abcde' @app.get('/user') def user(name: str = Depends(get_user)): return {'name': name}

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

{"name": "abcde"}

Пример

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

from fastapi import FastAPI, Depends app = FastAPI() def get_user() -> dict: return {'name': 'abcde', 'role': 'admin'} @app.get('/user') def user(data: dict = Depends(get_user)): return data

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

{"name": "abcde", "role": "admin"}

Пример

Давайте построим цепочку зависимостей, где одна зависит от другой:

from fastapi import FastAPI, Depends app = FastAPI() def get_token() -> str: return 'secret-token' def get_user(token: str = Depends(get_token)) -> dict: return {'token': token, 'name': 'abcde'} @app.get('/user') def user(data: dict = Depends(get_user)): return data

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

{"token": "secret-token", "name": "abcde"}

Пример

Давайте отключим кеширование через параметр use_cache, чтобы зависимость вызывалась при каждом обращении:

<+python+> from fastapi import FastAPI, Depends app = FastAPI() def get_counter() -> int: return 1 @app.get('/counter') def counter( first: int = Depends(get_counter, use_cache=False), second: int = Depends(get_counter, use_cache=False), ): return {'first': first, 'second': second} <-python+>

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

{"first": 1, "second": 1}

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

  • функция Security,
    которая объявляет зависимость с учётом областей доступа
  • класс OAuth2PasswordBearer,
    который извлекает токен из заголовка Authorization
  • класс HTTPBasic,
    который реализует базовую HTTP-аутентификацию
  • класс HTTPBasicCredentials,
    который хранит логин и пароль пользователя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить