Параметр dependencies
Параметр dependencies передаётся в конструктор класса
FastAPI и принимает список зависимостей,
которые FastAPI выполняет для каждого запроса
ко всем маршрутам приложения.
Каждая зависимость - это функция или класс,
оформленный через Depends.
Если зависимость вернёт ошибку,
обработчик маршрута не будет вызван.
Синтаксис
app = FastAPI(dependencies=[Depends(dep1), Depends(dep2)])
Пример
Давайте создадим глобальную зависимость,
которая проверяет заголовок X-Token:
from fastapi import FastAPI, Depends, Header, HTTPException
def verify_token(x_token: str = Header()):
if x_token != 'abcde':
raise HTTPException(status_code=400, detail='Invalid token')
return x_token
app = FastAPI(dependencies=[Depends(verify_token)])
@app.get('/')
def index():
return {'text': 'hello'}
Результат выполнения кода для запроса без заголовка:
{"detail": "Invalid token"}
Пример
Давайте передадим корректный заголовок X-Token
и получим успешный ответ:
curl -H "X-Token: abcde" http://127.0.0.1:8000/
Результат выполнения кода:
{"text": "hello"}
Пример
Давайте добавим несколько глобальных зависимостей сразу:
from fastapi import FastAPI, Depends, Header, HTTPException
def verify_token(x_token: str = Header()):
if x_token != 'abcde':
raise HTTPException(status_code=400, detail='Invalid token')
return x_token
def verify_key(x_key: str = Header()):
if x_key != 'user':
raise HTTPException(status_code=400, detail='Invalid key')
return x_key
app = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])
@app.get('/article')
def article():
return {'title': 'article'}
Результат выполнения кода при корректных заголовках:
{"title": "article"}
Смотрите также
-
класс
FastAPI,
к которому применяется параметр dependencies -
параметр
route.dependencies,
который задаёт зависимости для отдельного маршрута -
метод
include_router,
который подключает роутер с его зависимостями -
метод
add_middleware,
который добавляет middleware для обработки запросов