Параметр use_cache
Параметр use_cache применяется в классах безопасности
FastAPI, таких как OAuth2PasswordBearer,
OAuth2AuthorizationCodeBearer, HTTPBearer
и других. Он определяет, будет ли схема безопасности
кешироваться при многократном использовании в разных
зависимостях. По умолчанию параметр равен True,
что означает включённое кеширование. Если установить
False, то при каждом запросе схема безопасности
будет создаваться заново.
Кеширование полезно, когда одна и та же схема безопасности используется в нескольких местах приложения. Это экономит ресурсы и ускоряет обработку запросов. Однако в редких случаях, например при динамической смене параметров схемы, кеш может мешать, и тогда его отключают.
Синтаксис
OAuth2PasswordBearer(tokenUrl, use_cache=True)
Пример
Давайте создадим схему OAuth2PasswordBearer
с включённым кешированием и применим её в маршруте:
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
use_cache=True
)
@app.get('/items/')
def read_items(token: str = Depends(oauth2_scheme)):
return {'token': token}
При каждом запросе к /items/ FastAPI возьмёт
схему из кеша, а не создаст её заново.
Пример
Давайте отключим кеширование, установив use_cache=False:
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(
tokenUrl='token',
use_cache=False
)
@app.get('/users/')
def read_users(token: str = Depends(oauth2_scheme)):
return {'token': token}
Теперь схема безопасности будет создаваться заново
при каждом запросе к /users/.
Пример
Давайте сравним поведение двух зависимостей с разными
значениями use_cache в одном приложении:
from fastapi import FastAPI, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
cached_scheme = OAuth2PasswordBearer(
tokenUrl='token',
use_cache=True
)
uncached_scheme = OAuth2PasswordBearer(
tokenUrl='token',
use_cache=False
)
@app.get('/cached/')
def cached_route(token: str = Depends(cached_scheme)):
return {'token': token, 'cached': True}
@app.get('/uncached/')
def uncached_route(token: str = Depends(uncached_scheme)):
return {'token': token, 'cached': False}
Результат выполнения кода для адреса /cached/:
{"token": "abcde", "cached": true}
Результат выполнения кода для адреса /uncached/:
{"token": "abcde", "cached": false}
Смотрите также
-
класс
OAuth2PasswordBearer,
который извлекает токен из заголовка Authorization -
класс
HTTPBearer,
который реализует HTTP Bearer аутентификацию -
функция
Depends,
которая внедряет зависимости в маршруты -
класс
Security,
который расширяет Depends для схем безопасности